2

У меня есть консольное приложение Windows, которое принимает список файлов как параметр, каждый из которых разделен пробелом, например MyApp.exe 1.txt 2.txt 3.txt. Моя папка имеет другие форматы файлов в дополнение к txt, но меня интересуют только файлы txt. Я хотел бы добиться чего-то подобного MyApp.exe for %%i in (.\*.txt). Заранее спасибо.Объединение списка в командной строке

ответ

2

Единственная особенность заключается в том, что вам нужно включить delayed expansion - это сделать так:

@ECHO OFF 
SETLOCAL EnableDelayedExpansion 
FOR %%I IN (.\*.txt) DO SET files=!files! %%I 
MyApp.exe !files! 

Это называют:

MyApp.exe .\1.txt .\2.txt .\3.txt 

Если вы хотите, чтобы раздеть любую информацию пути, используйте %%~nxI вместо от %%I:

@ECHO OFF 
SETLOCAL EnableDelayedExpansion 
FOR %%I IN (.\*.txt) DO SET files=!files! %%~nxI 
MyApp.exe !files! 

Это будет resu л в:

MyApp.exe 1.txt 2.txt 3.txt 

Имейте в виду, что есть a limit on the length of the command:

На компьютерах под управлением Microsoft Windows XP или более поздней версии, максимальная длина строки, которые можно использовать в командной строке составляет 8191 персонажи.

+0

Возможно, '%% ~ fI', чтобы получить имена файлов только в том виде, как указано в вопросе? – geisterfurz007

+0

@ geisterfurz007: Действительный вопрос, может быть, за исключением этого, конечно, будет '%% ~ nxI' – zb226

+0

Erm Да, немецкий документ сообщил, что он будет расширяться до полного имени файла, поэтому я отвлекся, но вы правы :) – geisterfurz007