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

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

Ответить
Настройки темы
CMD/BAT - [решено] Как осуществить циклическую обработку параметров %1,%2... в bat-файле

Пользователь


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

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


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

Отправлено: 06:26, 11-04-2010

 

Googler


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

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


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

Отправлено: 08:27, 11-04-2010 | #2



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

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


Пользователь


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

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


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

Отправлено: 10:35, 11-04-2010 | #3


Googler


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

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


Цитата leonaft:
Notepad сдесь в качестве паузы »
для паузы есть команда PAUSE
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:50, 11-04-2010 | #4


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

Ветеран


Contributor


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

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


leonaft,

Код: Выделить весь код
@Echo Off
For %%A In (%*) Do Start /Wait "" "PathToProgramm\Programm.exe" %%~A
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:43, 12-04-2010 | #5


Старожил


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

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


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

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 16:39, 12-04-2010 | #6


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

Ветеран


Contributor


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

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



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

Отправлено: 18:12, 12-04-2010 | #7


Пользователь


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

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


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

Отправлено: 14:03, 14-04-2010 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как реализовать в .bat файле возможность убить какой то процесс PlayOFF Скриптовые языки администрирования Windows 27 02-02-2024 02:15
CMD/BAT - Как реализовать в AUTOEXEC.BAT файле возможность блокировки ПК на 1 минуту Baiker Скриптовые языки администрирования Windows 0 19-02-2010 01:42
[решено] Сохранение параметров скрипта во внешнем файле Freez AutoIt 2 14-12-2009 19:00
Как создать ярлык на сетевой диск в bat файле? AlexKKK Microsoft Windows NT/2000/2003 4 13-12-2007 03:28
CMD/BAT - Как в bat файле реализовать ввод IP? warezhka84 Скриптовые языки администрирования Windows 5 29-12-2004 08:56




 
Переход