У меня есть консольное приложение Windows, которое принимает список файлов как параметр, каждый из которых разделен пробелом, например MyApp.exe 1.txt 2.txt 3.txt
. Моя папка имеет другие форматы файлов в дополнение к txt, но меня интересуют только файлы txt. Я хотел бы добиться чего-то подобного MyApp.exe for %%i in (.\*.txt)
. Заранее спасибо.Объединение списка в командной строке
2
A
ответ
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 персонажи.
Возможно, '%% ~ fI', чтобы получить имена файлов только в том виде, как указано в вопросе? – geisterfurz007
@ geisterfurz007: Действительный вопрос, может быть, за исключением этого, конечно, будет '%% ~ nxI' – zb226
Erm Да, немецкий документ сообщил, что он будет расширяться до полного имени файла, поэтому я отвлекся, но вы правы :) – geisterfurz007