2015-01-16 9 views
0

Интересно, как показать все файлы в каталоге, за исключением расширения.Список всех файлов в каталоге, кроме расширения

Пример: .bat


Мой код:

Dir /ah-d /b /s "%temp%" >>"Temp.TxT" 

Результат:

Folder123 
image.jpg 
TESTE.bat 
abc.TMP 

Результат Я хочу:

Folder123 
image.jpg 
abc.TMP 

Примечание: Другие файлы могут варьироваться расширения.

ответ

2

Вы можете фильтровать вывод по трубопроводу к Findstr, отвергая линии, которые заканчиваются с расширением.

Опция /L рассматривает поиск как литеральный поиск (в отличие от обычного выражения). Опция /E соответствует только в конце строки. Опция /I делает регистр нечувствительным к регистру. Опция /V инвертирует поиск, сохраняя строки, которые не соответствуют, отфильтровывая строки, которые соответствуют

dir /ah-d /b /s "%temp%" | findstr /live .bat >>"temp.txt" 
0

Это подбирает конкретные расширения - нет, jp (например, g) и tmp.

dir /ah-d /b /s "%temp%\*." "%temp%\*.jp*" "%temp%\*.tmp" 

Чтобы исключить трубу вывод

dir /ah-d /b /s "%temp%\*.*" | Findstr /i /v /c:".bat" >outputfile 
+0

Это не совсем надежное - это исключило бы что-нибудь с '.bat' в нем, например: 'this.bat.txt',' myfile.bat1' –

+0

Так что, насколько это возможно. – Serenity

+1

Вы не должны делать предположений о своих данных. –

0

Вы можете сделать это из командной строки (не требует пакетного файла):

FOR /F "usebackq tokens=* delims=" %A IN (`DIR /B /S "%temp%"`) DO (IF /I NOT "%~xA"==".bat" ECHO %A>>Out.txt) 

Ключевой частью этого является %~xA части который вернет расширение файла обрабатываемого файла. Затем это сравнивается с расширением, которое вы хотите исключить (в данном случае .bat), и если оно не соответствует, то имя файла записывается на выход.

Обратите внимание, что в вашем примере вы возвращаете каталоги, поэтому моя команда DIR не исключает их. Кроме того, поскольку вы используете переключатель /S, возвращается полный путь. Если вы хотите, чтобы получить часть названия файла, просто заменить:

ECHO %A 

С:

ECHO %~nxA 
Смежные вопросы