Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как осуществить циклическую обработку параметров %1,%2... в bat-файле (http://forum.oszone.net/showthread.php?t=172796)

leonaft 11-04-2010 06:26 1389853

Как осуществить циклическую обработку параметров %1,%2... в bat-файле
 
Ситация такая:
Бат-файлу передаются параметры %1, %2, ... он их обрабатывает и передаёт приложению в качестве парметров %1, %2,..
Число параметров, передаваемых бат-файлу, не фиксированное, может быть разным. Нужен цикл, который поочерёдно обрабатывает переменные %i пока %i существует (или не равно нулю).
Возможно ли обрабатывать циклически такие переменные (%1, %2..) в коммндном файле?

amel27 11-04-2010 08:27 1389875

leonaft, гляньте для начала тему:
CMD/BAT - [решено] Обработка ключей запуска CMD- файла

leonaft 11-04-2010 10:35 1389926

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 сдесь в качестве паузы:)

amel27 11-04-2010 12:50 1390015

Цитата:

Цитата leonaft
Notepad сдесь в качестве паузы »

для паузы есть команда PAUSE :)

El Sanchez 12-04-2010 15:43 1390827

leonaft,

Код:

@Echo Off
For %%A In (%*) Do Start /Wait "" "PathToProgramm\Programm.exe" %%~A


NiOl 12-04-2010 16:39 1390884

El Sanchez, ГЕНИАЛЬНО!
Вот извечная была проблема пропарсить одну строку из неизвестного кол-ва элементов, а тут такое элегантное решение нарисовалось - отправить строку в процедуру как параметры (правда ужесточается ограничение длины строки) и парсить их обычным циклом! :clapping:

El Sanchez 12-04-2010 18:12 1390971


Цитата:

Цитата NiOl
правда ужесточается ограничение длины строки »

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

leonaft 14-04-2010 14:03 1392319

Кстати, заметил ограничение длины строки команды. Например, нужно выделить энное число папок и файлов и передать их пути приложению или батнику. Проверил это на дирректории Program files (там очень много папок). Максимум можно передать через командную строку 66-62 а то и меньше путей (зависит от длины этих путей и имён).
В Тоталкоммандере, параметр %L возвращает путь к текстовому файлу, содержащему список всех путей выделенных файлов и папок, который автоматически создаётся в каталоге %Temp% при запросе этого параметра. Многие программы для работы с файлами поддерживают чтение путей из текстового файла.
Наверное, только используя подобный способ - запись путей в файл, и потом передача этого списка приложению (архвиатору, копиеру, антивирусу...), можно производить операции, со сколь угодно большим числом файлов и папок.


Время: 07:55.

Время: 07:55.
© OSzone.net 2001-