Показать полную графическую версию : [решено] Как осуществить циклическую обработку параметров %1,%2... в bat-файле
Ситация такая:
Бат-файлу передаются параметры %1, %2, ... он их обрабатывает и передаёт приложению в качестве парметров %1, %2,..
Число параметров, передаваемых бат-файлу, не фиксированное, может быть разным. Нужен цикл, который поочерёдно обрабатывает переменные %i пока %i существует (или не равно нулю).
Возможно ли обрабатывать циклически такие переменные (%1, %2..) в коммндном файле?
leonaft, гляньте для начала тему:
CMD/BAT - [решено] Обработка ключей запуска CMD- файла (http://forum.oszone.net/showthread.php?t=159734)
amel27, мало чего понял из того, что там написано, но то, что мне нужно вроде бы получилось.
Вот например батник, выводящий список, всех сообщённых ему параметров:
@Echo Off
Set $I=1& For %%i In (%*) Do Set $P=%%i& Call :Dilplay
Notepad
Exit
:Dilplay
echo %$I%-ый параметр=%$P%
Set /a $I=%$I%+1
GoTo :EOF
Notepad сдесь в качестве паузы:)
Notepad сдесь в качестве паузы »
для паузы есть команда PAUSE :)
El Sanchez
12-04-2010, 15:43
leonaft,
@Echo Off
For %%A In (%*) Do Start /Wait "" "PathToProgramm\Programm.exe" %%~A
El Sanchez, ГЕНИАЛЬНО!
Вот извечная была проблема пропарсить одну строку из неизвестного кол-ва элементов, а тут такое элегантное решение нарисовалось - отправить строку в процедуру как параметры (правда ужесточается ограничение длины строки) и парсить их обычным циклом! :clapping:
El Sanchez
12-04-2010, 18:12
правда ужесточается ограничение длины строки »
NiOl, это вы про что? Если про ограничение кол-ва токенов у for-а в 52 штуки, то здесь токен только один, поэтому передавать батнику можно сколь угодно параметров (ну почти). Если про длину строки команды, то в XP 8190 символов хватит на любую строку.
Under Windows NT, the command line is limited to 256 characters.
Under Windows 2000, the command line is limited to 2046 characters.
Under Windows XP, the command line is limited to 8190 characters.
For all OS's NTFS and FAT allows pathnames of up to 260 characters.
A workaround for the limited pathname length is to prefix \\?\
for example:
\\?\C:\TEMP\Long_Directory\Long_Filename.txt
Кстати, заметил ограничение длины строки команды. Например, нужно выделить энное число папок и файлов и передать их пути приложению или батнику. Проверил это на дирректории Program files (там очень много папок). Максимум можно передать через командную строку 66-62 а то и меньше путей (зависит от длины этих путей и имён).
В Тоталкоммандере, параметр %L возвращает путь к текстовому файлу, содержащему список всех путей выделенных файлов и папок, который автоматически создаётся в каталоге %Temp% при запросе этого параметра. Многие программы для работы с файлами поддерживают чтение путей из текстового файла.
Наверное, только используя подобный способ - запись путей в файл, и потом передача этого списка приложению (архвиатору, копиеру, антивирусу...), можно производить операции, со сколь угодно большим числом файлов и папок.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.