2014-09-23 2 views
3

С помощью пакетных файлов, это достаточно просто, чтобы обработать все файлы, которые разделяют строку в имени файла или расширения, такие как:Инвертировать смысл команды FOR?

FOR /R %F IN (*.EXE) DO @ECHO %F 

Но что, если я хочу, чтобы инвертировать смысл набора файлов? Например, обрабатывать все файлы, которые не конец в .EXE?

FOR /R %F IN (anything-but-exe) DO @ECHO %F 

Я не мог найти ничего, что, казалось, что я искал, прочитав вывод FOR /?

ответ

5
for /f "tokens=* delims=" %a in ('dir /s /b /a:-d^|findstr /i/e/v ".exe" ') do @echo %a 
+2

Это фильтр out 'file tax.exempt.txt', поэтому' findstr/i/e/v ".exe" 'лучше, чем использование find. OP также нуждается в рекурсивном поиске. – foxidrive

+1

@foxidrive - хорошая точка. Будет исправлено – npocmaka

4

Это должно быть другой вариант:

FOR /R %F IN (*.*) DO @if /i not "%~xF"==".exe" ECHO %F 
+0

Yup, это тоже работает, но @ должно быть перед IF вместо этого, чтобы подавить весь ненужный вывод в командной строке –