Используя цикл for в Microsoft cmd.exe, как я могу обрабатывать только файлы с определенным расширением?

У меня есть папка c:\test\ и два файла в нем a.txt а также b.txtv,

Я хотел бы обрабатывать только файлы с расширением, равным .txt,

Если я напишу эту команду

cd c:\test
for %f in (*.txt) do echo %f

Я получу результат, где оба a.txt а также b.txtv перечислены.

То же самое происходит с

cd c:\test
dir *.txt

Похоже на то .txt это то же самое из .txtv,

У меня Windows XP SP3 на итальянском языке и результат

ver

является Microsoft Windows XP [Versione 5.1.2600],

Тот же результат от Windows 7 на английском Microsoft Windows XP [Version 6.1.7601],

3 ответа

Попробуйте использовать forfiles вместо. Кажется, он более ограничен в отношении того, что он возвращает для расширения, плюс он имеет дополнительное преимущество встроенного for петля. Уже должно быть на коробке Win7, но вам, возможно, придется установить 2003 Server Resource Kit на коробку XP, чтобы получить его там.

for %%I in (*.*) do if "%%~xI"==".txt" (echo %%I)

Это должно сделать это.

Изменить: это синтаксис "сценариев". Если вы хотите ввести это в командной строке, вы должны удалять один из знаков% каждый раз, когда они удваиваются, вставьте следующее:

for %I in (*.*) do if "%~xI"==".txt" (echo %I)

Это действительно просто в PowerShell и отлично работает со следующим:

PS C:\Users\bpabst\Desktop> ls *.txt


Directory: C:\Users\bpabst\Desktop


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---          7/2/2012  11:19 AM         11 test.txt
Другие вопросы по тегам