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

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

Ответить
Настройки темы
CMD/BAT - Подстановка большого количества параметров.

Новый участник


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

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


Всех с наступающим!

Народ, подскажите пожалуйста, как реализовать?

Есть некая программа, и куча файлов.
Нужно, чтобы батник запускал эту программы в виде:
programm.exe blabla.txt blabla1.txt .... blabla999.txt.
то есть чтобы батник запускал программу с параметрами в виде имен файлов(с расширением) разделенными через пробел.

Как я понимаю, самый простой способ, это использовать %1-%9, но этих переменных всего девять... (не считая нуля)
а файлов, зачастую, куда больше.

вот такое вот наваял:
Код: Выделить весь код
for %%e in (*.xyz) do (
Echo  %%~nxe>>Big.txt
)
Таким образом, я получаю файл с нужным мне текстом, так как конкатенации строк, как я понимаю в батах нет.(Может я все-таки ошибаюсь?)
Все было бы замечательно, но.
Почему-то Echo записывает не только название файла, но и зачем-то добавляет в конец символ конца строки.
И того у меня выходит файл с построчно выведенными именами файлов, а считать можно только одну строку..

Итак вопрос: как считать весь файл в переменную? Или может не стоит даже заморачиваться с файлом, а можно сделать проще?
Заранее спасибо

Отправлено: 14:50, 29-12-2011

 

Аватара для gora

Ушёл из жизни


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

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


Цитата Zeneth:
самый простой способ, это использовать %1-%9, но этих переменных всего девять »
Есть еще %* которая содержит все параметры ком строки даже если их больше девяти.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:05, 29-12-2011 | #2



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

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


Новый участник


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

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


Как интересно, спасибо за быстрый ответ.
Но тогда возникает другой вопрос: как же это использовать? Почему-то запись %~nx* не работает. Как-то иначе можно использовать? И более того, если в %* все параметры, то там и %0?. А %0 - это это имя бат файла. Оно мне точно не нужно

Отправлено: 15:22, 29-12-2011 | #3


Аватара для gora

Ушёл из жизни


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

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


Цитата Zeneth:
Нужно, чтобы батник запускал эту программы в виде:
programm.exe blabla.txt blabla1.txt .... blabla999.txt.
то есть чтобы батник запускал программу с параметрами в виде имен файлов(с расширением) разделенными через пробел. »
Цитата Zeneth:
как же это использовать? »
Запуск батника строкой:
Код: Выделить весь код
test.bat blabla1.txt blabla2.txt blabla3.txt blabla4.txt blabla5.txt blabla6.txt blabla7.txt blabla8.txt blabla9.txt blabla10.txt blabla11.txt blabla12.txt blabla13.txt blabla14.txt
Сам батник test.bat:
Код: Выделить весь код
@Echo Off
Echo programm.exe %*
Pause>nul
Echo для контроля, удалите его после проверки
Цитата Zeneth:
то там и %0?. »
Нет, его там нет.

Можно запустить и так:
Код: Выделить весь код
test.bat "blabla1.txt blabla2.txt blabla3.txt blabla4.txt blabla5.txt blabla6.txt blabla7.txt blabla8.txt blabla9.txt blabla10.txt blabla11.txt blabla12.txt blabla13.txt blabla14.txt"
Сам батник тогда будет выглядеть так test.bat:
Код: Выделить весь код
@Echo Off
Echo programm.exe %~1
Pause>nul
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:37, 29-12-2011 | #4


Новый участник


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

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


Понятно, спасибо.
Но все-же.. проблемы это не решает пока...
Дело в том, что файлов очень много. Следовательно запуск батника с параметрами - это тупо перетаскивание всех файлов на сам батник. Если сделать так, то в %* содержатся все те файлы с путями. запись %~nx* не работает.

сделать так:
Код: Выделить весь код
test.bat blabla1.txt blabla2.txt blabla3.txt blabla4.txt blabla5.txt blabla6.txt blabla7.txt blabla8.txt blabla9.txt blabla10.txt blabla11.txt blabla12.txt blabla13.txt blabla14.txt
это все равно, что выполнить
Код: Выделить весь код
programm.exe blabla1.txt blabla2.txt blabla3.txt blabla4.txt blabla5.txt blabla6.txt blabla7.txt blabla8.txt blabla9.txt blabla10.txt blabla11.txt blabla12.txt blabla13.txt blabla14.txt
проблема в том, что приходится руками дописывать кучу файлов... а это крайне неудобно...

есть еще варианты?

Отправлено: 16:07, 29-12-2011 | #5


Аватара для gora

Ушёл из жизни


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

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


Цитата Zeneth:
проблема в том, что приходится руками дописывать кучу файлов »
О том, что эту ком строку нужно сформировать автоматически в вопросе не звучало. Было:
Цитата Zeneth:
Есть некая программа, и куча файлов.
Нужно, чтобы батник запускал эту программы в виде:
programm.exe blabla.txt blabla1.txt .... blabla999.txt.
то есть чтобы батник запускал программу с параметрами в виде имен файлов(с расширением) разделенными через пробел. »
Не указано: где лежат эти файлы, есть ли там другие (ненужные в ком строке) файлы, по какому критерию (порядку) составлять список файлов в ком строке и т.д.. Уточните

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

Может так?
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
for %%e in (*.txt) do Set allfiles=!allfiles! %%~nxe
Echo programm.exe!allfiles!
Pause

Последний раз редактировалось gora, 29-12-2011 в 16:29.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:20, 29-12-2011 | #6


Новый участник


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

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


Цитата:
Не указано: где лежат эти файлы, есть ли там другие (ненужные в ком строке) файлы, по какому критерию (порядку) составлять список файлов в ком строке и т.д.. Уточните
Уточняю, там только файлы одного типа *.xyz. То есть, в папке нет ничего лишнего. По крайней мере не должно быть. Где лежат? В папке. Просто в папке на диск По какому критерию составлять список файлов? абсолютно все равно, важен лишь полный перебор названий всех файлов с расширениями. Разделены должны быть пробелами. Это все.


Цитата:
И зачем тогда передавать эти имена в ком строке батнику, если их можно получить в самом батнике и сразу же запустить исполняемый файл с ними.
В том то и вопрос, как их получить в батнике так, чтобы можно было их сразу же передать исполняемому файлу в качестве параметров?

Может я не понимаю чего-то очевидного?

Отправлено: 16:36, 29-12-2011 | #7


Новый участник


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

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


Цитата:
Может так?
Код: Выделить весь код
@Echo Off SetLocal enabledelayedexpansion for %%e in (*.txt) do Set allfiles=!allfiles! %%~nxe Echo programm.exe!allfiles! Pause
Во, так работает. Спасибо!
Если не сложно, подскажите, что это за SetLocal enabledelayedexpansion? и вот эта запись: allfiles=!allfiles! %%~nxe - это как я понимаю - дописывание к строке.... почему-то у меня не получалось...

В любом случае, большое спасибо!

Отправлено: 17:01, 29-12-2011 | #8


Старожил


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

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


Цитата:
Во, так работает.
enabledelayedexpansion вызывает проблему с именами содержащими символ !

Код: Выделить весь код
@Echo Off
for %%e in (*.txt) do (
	Set "file=%%~nxe"
	Call Set allfiles=%%allfiles%% "%%file:^%%=^^^%%%%"
)
Call Echo programm.exe%%allfiles%%
Pause
и имена лучше брать в кавычки, потому что в них м.б. пробелы и др. спецсимволы, которых в batch'e туёва хуча

Отправлено: 17:51, 29-12-2011 | #9


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

Ветеран


Contributor


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

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


Цитата Zeneth:
что это за SetLocal enabledelayedexpansion? »
Zeneth, включение режима отложенного раскрытия переменных, когда символ % в имени переменной заменяется на !, имеющего меньший приоритет. Включение не позволяет переменной allfiles раскрываться при каждой итерации цикла, иначе переменная получит значение только последней итерации (имя последнего файла). Но есть один минус - если в названии файла будет присутствовать символ !, то при включенном режиме при обработке имен этот символ будет "проглочен" интерпретатором, в результате чего имя файла будет уже неверным. Вот вариант без включения режима:
Код: Выделить весь код
@echo off
setlocal
for %%e in (*.xyz) do if not defined allfiles (Set allfiles="%%~nxe") else (Call Set allfiles=%%allfiles%% "%%~nxe")
Echo programm.exe %allfiles%
Pause
oops, kiripanda уже ответил
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:07, 29-12-2011 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Проблема с просмотром большого количества файлов в explorer Pikki-pikki Microsoft Windows 2000/XP 8 30-05-2021 00:24
Разное - [решено] Установка большого количества жестких дисков. KPACHbIu Накопители (SSD, HDD, USB Flash) 2 15-06-2011 14:31
Интерфейс - [решено] Переименование большого количества файлов 7human7 Microsoft Windows 2000/XP 7 22-11-2008 09:48
Flash - Проблема копирования большого количества файлов в корневой каталог флешки SANIOK_AV Накопители (SSD, HDD, USB Flash) 2 05-09-2008 11:43
Разное - IE зависает при открытии большого количества вкладок multy Microsoft Windows Vista 2 11-10-2007 14:25




 
Переход