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

Компьютерный форум 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

 

Ветеран


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

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


Почему никто не вспомнил про «shift»?

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



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

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


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


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

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


kiripanda,
Цитата:
Цитата: Во, так работает. enabledelayedexpansion вызывает проблему с именами содержащими символ ! Код: @Echo Off for %%e in (*.txt) do ( Set "file=%%~nxe" Call Set allfiles=%%allfiles%% "%%file:^%%=^^^%%%%" ) Call Echo programm.exe%%allfiles%% Pause и имена лучше брать в кавычки, потому что в них м.б. пробелы и др. спецсимволы, которых в batch'e туёва хуча
Полезное замечание. Правда в моем случае это не имеет никакого значения...
Но код меня заинтересовал. Зачем куча ^? Почему в конце четыре знака процента, да еще и без переменной...
Вообще не понятно, что это за разыменование такое хитрое? Для чего здесь используется Call?


El Sanchez ,
Цитата:
Zeneth, включение режима отложенного раскрытия переменных, когда символ % в имени переменной заменяется на !, имеющего меньший приоритет. Включение не позволяет переменной allfiles раскрываться при каждой итерации цикла, иначе переменная получит значение только последней итерации (имя последнего файла).
спасибо, стало понятно
По коду аналогичные вопросы

Ishka,
Цитата:
Почему никто не вспомнил про «shift»?
А что про шифт можно вспомнить? С удовольствием послушаю
Я про шифт знаю только то, что он сдвигает(необратимо) номера %0-%9 и делает их %1-%10 ну и так далее... или как-то так.. в общем я смутно помню уже

Отправлено: 23:21, 29-12-2011 | #12


Старожил


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

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


Цитата:
Зачем куча ^? Почему в конце четыре знака процента, да еще и без переменной...
Вообще не понятно, что это за разыменование такое хитрое? Для чего здесь используется Call?
Call использован как альтернатива enabledelayedexpansion.
Четыре знака процента (на самом деле 8 = 2 раза по 2 пары) потому, что в батниках, в отличии от ком.строки, знаки процента нужно удваивать – спецсимвол, однако.
Куча ^ для экранирования спецсимвола % и самого себя, потому что опять же спецсимвол.
В общем, проще сделать, чем объяснить как работает :D
Про "знак процента без переменной" прочитайте set/?

Цитата:
Почему никто не вспомнил про «shift»?
ИМХО shift здесь не поможет, потому что выполняет противоположную задачу – выбирает из строки параметров по одному.
А нужно наоборот, из построчного списка (который читается по одному элементу командой for) сделать непрерывный.

ЗЫ
попробуйте lst2str _http://www.ghisler.com/tools.htm

Последний раз редактировалось kiripanda, 30-12-2011 в 12:56.


Отправлено: 12:39, 30-12-2011 | #13


Ветеран


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

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


Значит, я неправильно понял поставленную задачу.

Отправлено: 13:16, 30-12-2011 | #14



Компьютерный форум 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




 
Переход