Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нужен батник для сканирования папок и записи результатов в файл

Ответить
Настройки темы
CMD/BAT - [решено] Нужен батник для сканирования папок и записи результатов в файл

Аватара для Nun-Nun

Ветеран


Сообщения: 2153
Благодарности: 294


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Nun-Nun
Дата: 17-09-2010
Есть набор папок, в каждой из которых расположен один файлик (чаще всего exe-шник). Нужно, с помощью батника просканировать эти папки и результаты получить в виде текстового файла или батника с таким содержимым:

;Название папки 1
"исполняемая команда" "Название папки 1"\"название файла в папке 1" "параметры"
;Название папки 2
"исполняемая команда" "Название папки 2"\"название файла в папке 2" "параметры"

...

;Название папки N
"исполняемая команда" "Название папки N"\"название файла в папке N" "параметры"

P.S. Папки и файлы в приведённом шаблоне на самом деле порядковых номеров не имеют, а имеют различные названия. Их нумерация приведена только для наглядности.

Отправлено: 13:33, 17-09-2010

 

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1273
Благодарности: 1030

Профиль | Отправить PM | Цитировать


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
	)
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:56, 20-09-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Nun-Nun

Ветеран


Сообщения: 2153
Благодарности: 294

Профиль | Отправить PM | Цитировать


Немного переделал скрипт (убрал кавычки и привязку к конкретной папке), теперь почти то, что надо. Поправьте, если я не прав.
Код: Выделить весь код
@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

-------
Свобода не означает вседозволенность.


Последний раз редактировалось Nun-Nun, 21-09-2010 в 16:01.


Отправлено: 14:54, 21-09-2010 | #3


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1273
Благодарности: 1030

Профиль | Отправить PM | Цитировать


Цитата Nun-Nun:
можно ли сделать, чтобы итоговый файл 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)
	)
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:18, 21-09-2010 | #4


Аватара для Nun-Nun

Ветеран


Сообщения: 2153
Благодарности: 294

Профиль | Отправить PM | Цитировать


Цитата El Sanchez:
я взял за основу 2 правила, которых придерживаюсь по-умолчанию: 1) сохранять сценарии CMD/BAT в кодировке DOS (OEM866), даже если она там не требуется; 2) любые пути заключать в двойные кавычки, даже если они там не требуются.
Код: »
Ну что ж, очень разумно, возьму тоже на заметку.
Иду пробовать скрипт.

-------
Свобода не означает вседозволенность.


Отправлено: 20:46, 21-09-2010 | #5


Аватара для Nun-Nun

Ветеран


Сообщения: 2153
Благодарности: 294

Профиль | Отправить PM | Цитировать


El Sanchez,

Есть ещё одна просьба: поскольку на основе работы скрипта создаётся bat-файл, в начале и конце бывает необходимо какое-нибудь сообщение. Например, перед началом выполнения скрипта выдаётся текст шапки батника и что-нибудь типа "Идёт считывание и запись имён папок и файлов"), а в конце - что-нибудь типа "Процесс завершён, результат находится в файле List.bat". Можно ли соответствующие поля для текста добавить в скрипт?

-------
Свобода не означает вседозволенность.


Отправлено: 22:58, 21-09-2010 | #6


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1273
Благодарности: 1030

Профиль | Отправить PM | Цитировать


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
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:54, 22-09-2010 | #7


Аватара для Nun-Nun

Ветеран


Сообщения: 2153
Благодарности: 294

Профиль | Отправить PM | Цитировать


El Sanchez,

Благодарю!
Всё работает.

-------
Свобода не означает вседозволенность.


Отправлено: 15:23, 22-09-2010 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нужен батник для сканирования папок и записи результатов в файл

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Батник + групповые политики Dudee Microsoft Windows NT/2000/2003 21 09-06-2010 10:23
CMD/BAT - Нужен батник для создания каталога с текущей версией ОС Скуб Скриптовые языки администрирования Windows 4 11-05-2010 14:26
CMD/BAT - [решено] нужен батник который бы пинговал диапазон ip и записывал результат в файл dvassilyev Скриптовые языки администрирования Windows 7 08-05-2009 14:33
Разное - Батник и сеть _Gans_ Программирование и базы данных 3 20-11-2008 10:19
[решено] .NET 3.0 нужен. А нужен ли .NET 2.0 для шаблонного сервера? LevT Автоматическая установка Windows 2000/XP/2003 7 09-07-2007 14:29




 
Переход