Показать полную графическую версию : [решено] Нужен батник для сканирования папок и записи результатов в файл
Есть набор папок, в каждой из которых расположен один файлик (чаще всего exe-шник). Нужно, с помощью батника просканировать эти папки и результаты получить в виде текстового файла или батника с таким содержимым:
;Название папки 1
"исполняемая команда" "Название папки 1"\"название файла в папке 1" "параметры"
;Название папки 2
"исполняемая команда" "Название папки 2"\"название файла в папке 2" "параметры"
...
;Название папки N
"исполняемая команда" "Название папки N"\"название файла в папке N" "параметры"
P.S. Папки и файлы в приведённом шаблоне на самом деле порядковых номеров не имеют, а имеют различные названия. Их нумерация приведена только для наглядности.
El Sanchez
20-09-2010, 17:56
Nun-Nun, мало вводных данных, поэтому:
@Echo Off
Set Source=C:\Source
Set ExecutableFile=исполняемый файл
Set Params=параметры
For /F "Tokens=*" %%A In ('Dir /B /AD "%Source%"') Do (
For /F "Tokens=*" %%B In ('Dir /B "%Source%\%%A\*.exe" 2^>nul') Do (
Echo ;%%A>>list.log
Echo "%ExecutableFile%" "%%A\%%B" %Params%>>list.log
)
)
Немного переделал скрипт (убрал кавычки и привязку к конкретной папке), теперь почти то, что надо. Поправьте, если я не прав.
@Echo Off
rem Set Source=C:\Source
Set ExecutableFile=start /wait .\
Set Params=/Q /O /N /Z
For /F "Tokens=*" %%A In ('Dir /B /AD') Do (
For /F "Tokens=*" %%B In ('Dir /B %%A\*.exe 2^>nul') Do (
Echo ;%%A>>list.cmd
Echo %ExecutableFile%%%A\%%B %Params%>>list.cmd
)
)
Echo.
Echo Названия папок и файлов скопированы в файл list.cmd
Echo.
Pause
Есть несколько пожеланий по поводу скрипта:
1) можно ли сделать, чтобы итоговый файл list.cmd сохранялся с русской кодировкой 866 ?
2) не могли бы Вы в скрипте прописать не только exe-файлы, но и msi-файлы? а то иногда, кроме exe-шников и msi попадаются.
P.S. Для большей информативности вводных данных:
1) глубина вложенности папок может быть более одного уровня;
2) исполняемая команда exe-файлов выглядит так: start /wait .\
3) параметры для exe-файлов выглядят так: /Q /O /N /Z
Командная строка для msi-файлов выглядит несколько иначе: "исполняемая команда" "Название папки" "параметры"
4) исполняемая команда выглядит так: start /D.\
5) параметры выглядят так: /wait MSIEXEC /I "имя msi-файла" ALLUSERS=TRUE REBOOT=SUPPRESS /QN
El Sanchez
21-09-2010, 17:18
можно ли сделать, чтобы итоговый файл list.cmd сохранялся с русской кодировкой 866 ? »
Nun-Nun, я взял за основу 2 правила, которых придерживаюсь по-умолчанию: 1) сохранять сценарии CMD/BAT в кодировке DOS (OEM866), даже если она там не требуется; 2) любые пути заключать в двойные кавычки, даже если они там не требуются.
@Echo Off
Set ParamsExe=/Q /O /N /Z
Set ParamsMsi=ALLUSERS=TRUE REBOOT=SUPPRESS /QN
Del /F /Q list.cmd 1>nul 2>&1
For /F "Tokens=*" %%A In ('Dir /S /B /AD') Do (
For /F "Tokens=*" %%B In ('Dir /B "%%A\*.exe" "%%A\*.msi"') Do (
Echo ::%%~nA>>list.cmd
If /I "%%~xB"==".exe" (Echo Start /Wait "" "%%A\%%B" %ParamsExe%>>list.cmd)
If /I "%%~xB"==".msi" (Echo Start /Wait "" MsiExec /I "%%A\%%B" %ParamsMsi%>>list.cmd)
)
)
я взял за основу 2 правила, которых придерживаюсь по-умолчанию: 1) сохранять сценарии CMD/BAT в кодировке DOS (OEM866), даже если она там не требуется; 2) любые пути заключать в двойные кавычки, даже если они там не требуются.
Код: »
Ну что ж, очень разумно, возьму тоже на заметку.
Иду пробовать скрипт.
El Sanchez,
Есть ещё одна просьба: поскольку на основе работы скрипта создаётся bat-файл, в начале и конце бывает необходимо какое-нибудь сообщение. Например, перед началом выполнения скрипта выдаётся текст шапки батника и что-нибудь типа "Идёт считывание и запись имён папок и файлов"), а в конце - что-нибудь типа "Процесс завершён, результат находится в файле List.bat". Можно ли соответствующие поля для текста добавить в скрипт?
El Sanchez
22-09-2010, 13:54
Nun-Nun, можно сделать как вы хотите (выделено красным), либо выводить данные сообщения в консоль (выделено зеленым)
@Echo Off
Set ParamsExe=/Q /O /N /Z
Set ParamsMsi=ALLUSERS=TRUE REBOOT=SUPPRESS /QN
Title Идёт считывание и запись имён папок и файлов
Echo Идёт считывание и запись имён папок и файлов...
Del /F /Q list.cmd 1>nul 2>&1
For /F "Tokens=*" %%A In ('Dir /S /B /AD') Do (
For /F "Tokens=*" %%B In ('Dir /B "%%A\*.exe" "%%A\*.msi"') Do (
Echo ::%%~nA>>list.cmd
If /I "%%~xB"==".exe" (Echo Start /Wait "" "%%A\%%B" %ParamsExe%>>list.cmd)
If /I "%%~xB"==".msi" (Echo Start /Wait "" MsiExec /I "%%A\%%B" %ParamsMsi%>>list.cmd)
)
)
Title Процесс завершён, результат находится в файле List.cmd
Echo Процесс завершён, результат находится в файле List.cmd
El Sanchez,
Благодарю!
Всё работает.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.