Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 6

Автор: artrad77
Дата сообщения: 03.04.2009 08:11
Помогите пожайлуста с решением одной проблемы
Вводная - планируется делать некие действия над компьютерами в сети, для этого выгружаем список компьютеров в файл (pcnames.txt)
net view /domain:DOMAIN > temp.txt
findstr /b /c:"\\" temp.txt > temp1.txt
for /F "delims=\\ " %%i in (temp1.txt) do echo %%i >> comp\pcnames.txt
del temp.txt, temp1.txt /f /q
Плюс имеем переменную в которой через пробел указаны компьютеры которые надо исключить (set exception=comp1 comp2 comp3). Нужно чтоб в итоге в списке не оказалось компьютеров "исключений" (обычно это делается цикл в цикле, но как реализовать в cmd не нашел) причем результат каждой обработки нужно вывести в отдельный файл названия компьютера что-то вроде этого
for /F %%A in (comp\pcnames.txt) do echo %%A > comp\%%A
т.е. в итоге получим в папке comp файлы с сетевыми именами компов которые надо обработать.
Автор: king_stiven
Дата сообщения: 03.04.2009 09:53
подскажите консольную утилитку для кодирования в wma из wav, или простенькую прожку с поддержкой комстроки.
Автор: Maza_Faka
Дата сообщения: 03.04.2009 10:12
artrad77
Попробуйте так:

Код:
@Echo Off

Set OutDir=C:\comp
Set Exception=comp1 comp2 comp3

For /F "Usebackq Delims=\\ " %%A In (`Net View ^| Find "\\" ^| Findstr /I /V "%Exception%"`) Do Echo %%A>%OutDir%\%%A.txt
Автор: alexagf
Дата сообщения: 03.04.2009 11:09
Промогите решить простейшую задачку:

Код: START /WAIT /D"%ProgramFiles%\путь" программа.exe /silent
Автор: 01MDM
Дата сообщения: 03.04.2009 11:19
alexagf

Попробуй так:

Код:
START /WAIT ("%ProgramFiles%\путь\программа.exe" /silent)
Автор: alexagf
Дата сообщения: 03.04.2009 11:34
01MDM

Цитата:
Windows не удалось найти ("C:\Program Files\путь\программа.exe")
что с ключом, что без...
Автор: 01MDM
Дата сообщения: 03.04.2009 12:01
alexagf

I'm sorry. Все перепутал, в скобки можно брать при запуске с CMD (cmd /c (start .....)

Попробуй:

Код:
start /wait "" "%ProgramFiles%\путь\программа.exe" /silent
Автор: alexagf
Дата сообщения: 03.04.2009 12:26
01MDM
О как! Работает! Спасибо!
А что означают эти две кавычки впереди? Без них не запускается.
Автор: 01MDM
Дата сообщения: 03.04.2009 12:30
alexagf

Цитата:
А что означают эти две кавычки впереди? Без них не запускается.


Это название окна. Без кавычек команда start принимает за титл будущего окна первую пару кавычек, а параметр команды за саму команду.

Автор: hhr
Дата сообщения: 03.04.2009 18:17
а как бы получить статистику по интерфейсу в плане принятых/отправленных байт? обработать результат есть чем, а вот как получить в батнике такую цифру - не в курсе.
Автор: metrim
Дата сообщения: 04.04.2009 02:42
В продолжение http://forum.ru-board.com/topic.cgi?forum=62&topic=15343&start=1040#15
Наконец сподобился опробовать скрипт. Вроде понятно как работает и нормально работает, только некие непонимания образовываются
Например фрагмент программы:

Цитата:
@echo off
setlocal enabledelayedexpansion
:: Вносим в переменную то, что было передано аргументом ком. строки
set "start=%~1"
:: Определяем вспомогательную переменную для подсчета кол-ва ведущих нулей
set "position=0"
:: В следующем блоке, находим количество ведущих нулей и
:: определяем переменную prefix с этими нулями
:find_prefix
if "!start:~%position%,1!"=="0" (
set "prefix=!prefix!0"
set /a "position+=1"
goto :find_prefix
)
:: в переменную "_start" записываем начальный индекс без ведущий нулей
set "_start=!start:~%position%!"
:: в переменную "_end" записываем конечный индекс
set /a "_end=_start+1000000"
:: стираем файл "all_range.txt" (если он существует) и создаем его заново - со всеми возможными ссылками
del /q all_range.txt 2>nul & for /l %%a in (%_start%,1,%_end%) do (
:: прибавляем ведущие нули к индексу
set "whole_number=%prefix%%%a"
:: записываем полную ссылку в файл
echo http://domen/!whole_number:~0,4!/!whole_number:~4,2!/!whole_number!.file>>all_range.txt
)

Генерирует список ВНИМАНИЕ из 999998 строк с начальной строкой ...../02000000 и конечной ...../03000000. Т.е. в моем понимании куда то теряются 3 строки. Как такое вообще может быть? какие строки (из логики программы) пропадают и как исправить баг?

Elroir, еще раз огромное спасибо за помощь, надеюсь на дальнейшие подсказки
Автор: Akam1
Дата сообщения: 04.04.2009 06:05
Задача наверное легкая, подскажите как сделать, что-то после пятницы никак не соображу
Есть bat-ник, выгружающий backup базы 1С по расписанию шедулера.
Кусок выглядит так:
Код: :1C
<... здесь происходит выгрузка стандартными средствами 1С, на выходе получается файл 1C_backup.dt ...>
if not exist d:\backup\1C_backup.dt goto 1C
Автор: NvvLazyTiger
Дата сообщения: 04.04.2009 07:36
Akam1
Цитата:
Как сделать так, чтобы попыток выгрузки, т.е. создания файла 1C_backup.dt, было только определенное количество раз, например, 10?
Например так:
Код: set TryCount=10
:1C
set /a TryCount-=1
<... здесь происходит выгрузка стандартными средствами 1С, на выходе получается файл 1C_backup.dt ...>
if not exist d:\backup\1C_backup.dt if %TryCount% GTR 0 goto 1C
Автор: Maza_Faka
Дата сообщения: 04.04.2009 07:46
Akam1

Цитата:
Как сделать так, чтобы попыток выгрузки, т.е. создания файла 1C_backup.dt, было только определенное количество раз, например, 10?

Попробуйте так:

Код:
@Echo Off

Set Count=0

:1C
Ping -n 3 127.0.0.1>Nul
If "%Count%"=="10" GoTo :EOF
Set /A Count+=1

::<... здесь происходит выгрузка стандартными средствами 1С, на выходе получается файл 1C_backup.dt ...>
If Not Exist d:\backup\1C_backup.dt GoTo :1C
Автор: Robby
Дата сообщения: 04.04.2009 08:00
Подскажите есть ли универсальное решение для распаковки всех RARархивов в каталоге, в котором имеются однотомные (*.rar) и многотомные (*.part*.rar) архивы? Если возможно, то желательно проверка успешности распаковки, и если все нормально распаковалось - удаление самих архивов.
Автор: Maza_Faka
Дата сообщения: 04.04.2009 09:24
Robby
Простой способ, без проверки:

Код:
@Echo Off

Set ArcDir=C:\MyArc
Set OutDir=c:\MyFolder

Rar e "%ArcDir%\*.rar" c:\MyFolder
Del /F /Q "%ArcDir%\*.rar"
Автор: quaka
Дата сообщения: 04.04.2009 09:34
Здравствуйте!
Написал скрипт который автоматически определяет шлюз и прописывает статическую маршрутизацию

@echo on
for /f "tokens=3" %%i in ('
netsh diag show gateway ^| findstr "DefaultIPGateway"
') do (
echo %%i | findstr "\<10\.39" 1>nul && set dg=%%i
)
route ADD 10.0.0.0 MASK 255.0.0.0 %dg%
pause

Дело в том что есть большое множество компов и шлюзы могут меняться, но известно одно что все шлюзы начинаются на 10.39.x.x.

Нужно сделать так, что бы если шлюз отличается от 10.39.х.х то выходило какоенить сообщение на пример "не корректный шлюз или типа того" и маршрут естественно не прописывался.

В принцепи просто нужно сравнить шлюз с неким шаблоном, но в том то и дело что шаблон известен не полностью только 10.39., как бы поступить?
Автор: 01MDM
Дата сообщения: 04.04.2009 09:47
quaka

Код:
@echo on
for /f "tokens=3" %%i in ('
netsh diag show gateway ^| findstr "DefaultIPGateway"
') do (
echo %%i | findstr "\<10\.39" 1>nul && set dg=%%i || echo Bad Gateway && goto:eof
)
route ADD 10.0.0.0 MASK 255.0.0.0 %dg%
pause
Автор: quaka
Дата сообщения: 04.04.2009 11:02
Сделал вот так
@echo on
for /f "tokens=3" %%i in ('
netsh diag show gateway ^| findstr "DefaultIPGateway"
') do (
echo %%i | findstr "\<192\.168" 1>nul && set dg=%%i route | ADD 10.0.0.0 MASK 255.0.0.0 %dg% || echo echo Xerani router
)
pause

Но теперь проблема, в случае не правельного шлюза выходит сообщение "Xerani router", это конечно хорошо, но в случае правельного шлюза не выполняется команда "route ADD 10.0.0.0 MASK 255.0.0.0 %dg%", он не вставляет шлюз вместо %dg%. Можно конечно вывести её в отдельный батник и попросить выполнить этот отдельный батник, но хотелось бы всё в одно скрипте заставить его выполнять.
Автор: Elroir
Дата сообщения: 04.04.2009 12:08
metrim

Цитата:
Генерирует список ВНИМАНИЕ из 999998 строк с начальной строкой ...../02000000 и конечной ...../03000000. Т.е. в моем понимании куда то теряются 3 строки. Как такое вообще может быть? какие строки (из логики программы) пропадают и как исправить баг?

Только что прогнал указанный кусок кода у себя на компе - получил файл с 1000001 строчками - от 2000000 до 3000000. В логике программы нет ничего, что могло бы пропускать определенные числа.
Автор: quaka
Дата сообщения: 04.04.2009 12:35
Сделал, совсем по другому, главное работает. : )
Автор: 01MDM
Дата сообщения: 05.04.2009 16:17
Делать было нечего, дело было вечером ©


[more=Простенький календарик]

Код:
::
:: Простенький, но аккуратный календарик на текущий месяц
::

@echo off
setlocal enabledelayedexpansion

:: Подготовка, проверяем наличие раскрашивалки. Где "e\" - это ASCII 027 знак.
:: Ansicon.exe - маленькая програмка для вывода esc-последовательностей в CMD.EXE.
if exist "%BIN%\ansicon.exe" (
set "mag=e\[0;35;40m"
set "yel=e\[1;33;40m"
set "tod=e\[1;32;40m"
set "def=e\[0m"
ansicon -p
)

:: Получаем исходные данные.
:: Работает там, где есть wmic.exe На XP Home только у меня ;)
set "exec=wmic path win32_LocalTime get Day,DayOfWeek,Month,WeekInMonth,Year /value"
for /f "tokens=1,2 delims==" %%i in ('%exec:,=^,%') do set "%%i=%%j" 2>nul

:: Определяем кол-во дней в месяце
set "LeapYear=28"
if %Month%==2 (
set /a CheckLeap=Year%%4
if !CheckLeap!==0 (set "LeapYear=29")
)

for %%i in (30,%LeapYear%,31,30,31,30,31,31,30,31,30,31) do (
set /a cnt+=1
if !cnt!==%Month% set "AllDays=%%i"
)

:: Неделя начинается с понедельника (1-7)
set "DayOfWeek=%DayOfWeek:0=7%"

:: Вычисляем календарь
set /a CurSunday=Day+7-DayOfWeek
for /l %%i in (%CurSunday%,-7,1) do set "cnt=%%i"

for /l %%i in (7,-1,1) do (
set "Week_1_%%i=!cnt!"
set /a cnt-=1
)

set "cnt=%Week_1_7%"

for /l %%i in (2,1,6) do (
for /l %%j in (1,1,7) do (
set /a cnt+=1
if !cnt! leq %AllDays% (
set "Week_%%i_%%j=!cnt!"
)
)
)

:: Обрабатываем полученный результат
for /f "tokens=1,2 delims==" %%i in ('set Week_') do (
set "num=%%j"
if !num! leq 0 (
set "%%i= "
) else (
if !num!==%Day% (
set t=%tod%
set d=%def%
)
set "num=0!num!"
set "num=!num:~-2!"
set "%%i=!t!!num!!d!
set "t=" && set "d="
)
)

for /f "tokens=2-4 delims=_=" %%i in ('set Week_') do (
set Week-%%i=!Week-%%i! !Week_%%i_%%j!
)

:: Выводим на консоль
echo.
echo %mag%Пн Вт Ср Чт Пт %yel%Сб Вс
echo %mag%-- -- -- -- -- %yel%-- --%def%
for /f "tokens=2 delims==" %%i in ('set Week-') do echo %%i
Автор: shubaly
Дата сообщения: 06.04.2009 11:24
Подскажите, пожалуйста, как убрать пробел в определенном месте в названии файла.
Например, есть файл
"aaa bbbb.xxx"
надо получить
"aaabbbb.xxx"

Спасибо.

P.S. Нужно для обработки группы файлов.



Добавлено:
Сделал, что хотел ч-з Kristanix File Renamer Turbo 2.57 , но хотелось-бы замутить задачку выше средствами Microsoft. Спасибо.
Автор: artrad77
Дата сообщения: 06.04.2009 14:22

Цитата:

@Echo Off

Set OutDir=C:\comp
Set Exception=comp1 comp2 comp3

For /F "Usebackq Delims=\\ " %%A In (`Net View ^| Find "\\" ^| Findstr /I /V "%Exception%"`) Do Echo %%A>%OutDir%\%%A.txt


Спасибо Maza_Faka в принципе помогло только кусок "проверки исключения" в цикл засовывать не надо

Еще один вопросик
Есть программа которая проводит действия со списком компов (список в файле list.txt)
и в случае ошибки заносит сетевое имя компа в cdrom.log Но у этой программы может быть несколько вариантов ошибок и хотелось бы увидеть в логе помимо перечисления сетевого имени компа суть ошибки (2>&1) но как реализовать это в цикле чтоб предыдущая запись не затиралась ума не приложу
for /f %%c in (list.txt) do programm.cmd || echo %%c >> cdrom.log
Автор: Maza_Faka
Дата сообщения: 06.04.2009 17:28
shubaly

Цитата:
хотелось-бы замутить задачку выше средствами Microsoft

Попробуйте так:

Код:
@Echo off

Set WorkDir=c:\Test

::Создаём утилиту sbs2.com
Call :sbs2.com

For /F "Usebackq Tokens=*" %%A In (`Dir /B /S %WorkDir% ^| Find " "`) Do (
For /F "Usebackq Tokens=*" %%B In (`Echo %%~nxA ^| "%temp%.\sbs2.com" 0 " " ""`) Do Ren "%%A" %%B
)

Del /F /Q "%temp%.\sbs2.com"
GoTo :EOF

:sbs2.com
:: Create the assembler program, by Herbert Kleebauer
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=> "%temp%.\sbs2.com"
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6>> "%temp%.\sbs2.com"
echo ?@}IKuNWpe~Fpe?FNHlF?wGMECIQqo{Ox{T?kPv@jeoSeIlRFD@{AyEKj@>> "%temp%.\sbs2.com"
echo iqe~1NeAyR?mHAG~BGRgB{~H?o~TsdgCYqe?HR~upkpBG?~slJBCyA?@xA>> "%temp%.\sbs2.com"
echo LZp{xq`Cs?H[C_vHDyB?Hos@QslFA@wQ~~x}viH}`LYNBGyA?@xAB?sUq`>> "%temp%.\sbs2.com"
echo LRy@PwtCYQEuFK@A~BxPtDss@fFqjVmzD@qBEOEenU?`eHHeBCMs?FExep>> "%temp%.\sbs2.com"
echo LHsPBGyA?@xAunjzA}EKNs@CA?wQpQpKLBHv?s`WJ`LRCYyIWMJaejCksl>> "%temp%.\sbs2.com"
echo H[GyFGhHBwHZjjHeoFasuFUJeHeB?OsQH[xeHCPvqFj@oq@eNc?~}Nu??O>> "%temp%.\sbs2.com"
echo ~oEwoAjBKs?Zp`LBzHQzyEFrAWAG{EFrAqAGYwHTECIQ{coKIsaCsf{Oe~>> "%temp%.\sbs2.com"
echo CK}Ayre~CNFA{rAyEKFACrA{EKGAjbA}eKGSjNMtQFtc{OAyDGFj?{FDGQ>> "%temp%.\sbs2.com"
echo KAjNVk_OCAx@e?f{o?CosI}1EGizhljJ~H1ZeG}JBA~rACBMDGjjDG@g0>> "%temp%.\sbs2.com"
Автор: SonkSPb
Дата сообщения: 06.04.2009 17:52
Помогите разобраться с проблемой?
Наваял батник. Делал его наплывами, потихоньку усложняя в меру своих возможностей.

[more]
del a:\*.* /Q
cls
@echo Введите PIN (780PIN) клиента:
@SET /P PIN=
@cls
@echo Копирование файлов клиента 780%PIN%:
@echo off
@xcopy R:\Clibank\cl_bank.ini a:\ /Q /Y > num
@if exist a:\cl_bank.ini (@echo Конфиг-файл скопирован) ELSE (@echo Конфиг-файл НЕ скопирован!!!)

rem @xcopy R:\Clibank\Manual.doc a:\ /Q /Y > num
rem @if exist a:\Manual.doc (@echo Руководство пользователя скопировано) ELSE (@echo Руководство пользователя НЕ скопировано!!!)

@xcopy R:\Clibank\Keys\clkeys\780%PIN%.kpr a:\ /Q /Y > num
@xcopy R:\Clibank\Keys\clkeys\780%PIN%.kpu a:\ /Q /Y > num

@if exist a:\780%PIN%.kpr (@echo Ключи скопированы) ELSE (@echo Ключи НЕ скопированы!!!)
del num /Q

:MENU1
@echo ********************************************************
@echo Выберите вариант примечания:
@echo 1) Первичная генерация.
@echo 2) Замена дискеты.
@echo 3) Свое примечание.

@SET /P CHOISE=


if "%CHOISE%"=="1" (
    @echo %DATE% %TIME% Ключи скопированы на дискету для клиента 780%PIN%: Первичная генерация >> R:\Clibank\Logs\key_copy.log
    goto END
    )


if "%CHOISE%"=="2" (
    @echo %DATE% %TIME% Ключи скопированы на дискету для клиента 780%PIN%: Замена ключевого носителя >> R:\Clibank\Logs\key_copy.log
    goto END
    )


if "%CHOISE%"=="3" (
@cls
    @echo ********************************************************
    @echo Введите основание для генерации ключей:

    @SET /P REMARK=
@echo %DATE% %TIME% Ключи скопированы на дискету для клиента 780%PIN%: %REMARK% >> R:\Clibank\Logs\key_copy.log
    goto END
    ) ELSE (goto MENU1)
:END
@echo ********************************************************
@echo ********************************************************
ping -n 5 localhost > nul

[/more]

Никак не могу добиться, вывода в лог key_copy.log Своего примечания.
Любая из первых переменных выводится, а вместо %REMARK% пустота.
Автор: braconier
Дата сообщения: 06.04.2009 17:56

Цитата:
braconier
для работы с папками идеальней robocopy не придумаешь
когда же я устану это повторять?
подскажите пожалуйста как при помощи robocopy скопировать паки по маске, в хелпе смотрел есть только exclude по маске.
Автор: ZenitFan
Дата сообщения: 06.04.2009 20:58
Подскажите пожалуйста, как средствами командной строки определить точный путь к папке профиля Firefox.

Код: Он имеет такой вид:
%appdata%\mozilla\firefox\profiles\????????.default
на месте знаков вопроса 8 случайных символов
Автор: king_stiven
Дата сообщения: 06.04.2009 21:57
SonkSPb

Код: Код:del a:\*.* /Q
cls
@echo Введите PIN (780PIN) клиента:
@SET /P PIN=
@cls
@echo Копирование файлов клиента 780%PIN%:
@echo off
@xcopy R:\Clibank\cl_bank.ini a:\ /Q /Y > num
@if exist a:\cl_bank.ini (@echo Конфиг-файл скопирован) ELSE (@echo Конфиг-файл НЕ скопирован!!!)

rem @xcopy R:\Clibank\Manual.doc a:\ /Q /Y > num
rem @if exist a:\Manual.doc (@echo Руководство пользователя скопировано) ELSE (@echo Руководство пользователя НЕ скопировано!!!)

@xcopy R:\Clibank\Keys\clkeys\780%PIN%.kpr a:\ /Q /Y > num
@xcopy R:\Clibank\Keys\clkeys\780%PIN%.kpu a:\ /Q /Y > num

@if exist a:\780%PIN%.kpr (@echo Ключи скопированы) ELSE (@echo Ключи НЕ скопированы!!!)
del num /Q

:MENU1
@echo ********************************************************
@echo Выберите вариант примечания:
@echo 1) Первичная генерация.
@echo 2) Замена дискеты.
@echo 3) Свое примечание.

@SET /P CHOISE=


if "%CHOISE%"=="1" (
@echo %DATE% %TIME% Ключи скопированы на дискету для клиента 780%PIN%: Первичная генерация >> R:\Clibank\Logs\key_copy.log
goto END
)


if "%CHOISE%"=="2" (
@echo %DATE% %TIME% Ключи скопированы на дискету для клиента 780%PIN%: Замена ключевого носителя >> R:\Clibank\Logs\key_copy.log
goto END
)

if "%CHOISE%"=="3" (
Call :jk
) ELSE (
goto MENU1
)
:END
@echo ********************************************************
@echo ********************************************************
ping -n 5 localhost > nul
goto :eof
:jk
@cls
@echo ********************************************************
@echo Введите основание для генерации ключей:

@SET /P REMARK=
@echo %DATE% %TIME% Ключи скопированы на дискету для клиента 780%PIN%: %REMARK% >> R:\Clibank\Logs\key_copy.log
Автор: vvlad0000
Дата сообщения: 07.04.2009 05:33
Может подскажет кто: при вызове из bat-файла какого-либо *.exe, окно консоли висит до тех пор, пока этот самый *.exe не завершится. Система - WinXP SP3. На Win2K, как я помню, такого не было.

Как заставить bat не ждать завершения вызванного из него приложения?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: как сохранить сетевые настройки


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.