Как сравнить имена файлов в каталоге с именами файлов в текстовом файле?

Я пытаюсь улучшить обзор моего поиска и найти память для пакетных файлов в среде командной строки Windows XP.
В ответ на мое предыдущее предложение я не доволен своими возможностями поиска и должен опубликовать вопрос.

Я пытаюсь сравнить имена некоторых текстовых файлов и написанные слова в текстовом файле, которые при чтении совпадают. С такой стартовой средой я написал следующий пакетный скрипт, чтобы получить вывод эха.

Цель

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%b in ('dir "C:\A Folder"') do set var=%%~nb & echo !var!

rem   The output is the name of the files without extension. Now my question:
rem   Is it possible to compare the above file names with some input
rem   from a text file, for example like:

for /f "delims=" %%b in ('dir "C:\A Folder"') do set var=%%~nb & for /f %%a in (Textfile.txt) do (if !var!==%%a echo good else echo search)

rem   That returns no output. I would like to know if there are possibilities
rem   to do that? And if it is possible, how to revise this batch file?

endlocal disabledelayedexpansion
pause

Хорошего дня, желает Стефан


person ledlightjungled    schedule 06.07.2014    source источник


Ответы (2)


Это должно работать с латинскими символами — некоторые иностранные символы могут не работать:

@echo off
for /f "delims=" %%b in ('dir /b /a-d "C:\A Folder\*.*" ') do find /i "%%~nb" < "textfile.txt" >nul && (echo "%%~nb" found) || (echo "%%~nb" not found)

pause
person foxidrive    schedule 06.07.2014
comment
Я бы использовал findstr /x вместо find - person Stephan; 06.07.2014
comment
@Stephan Вам также нужно использовать /c, потому что термин может содержать пробелы, но они оба будут работать. - person foxidrive; 06.07.2014
comment
Для этого кода я сделал параметр /a-d команды dir пустым, поэтому отображалось имя папки и можно было показать разницу. Вывод показал, что найдено для каждого сравниваемого имени в списке и не найдено для имени папки, которого не было в сохраненном списке. - person ledlightjungled; 06.07.2014
comment
У меня нет вашего текстового файла или содержимого вашей папки, поэтому я понятия не имею, что вы сравниваете. - person foxidrive; 06.07.2014

правильное форматирование вашего кода увеличивает читабельность:

for /f "delims=" %%b in ('dir /b /a-d "C:\A Folder"') do (
  for /f %%a in (textfile.txt) do (
    if "%%~nb"=="%%a" ( echo good ) else ( echo search )
  )
)

Я добавил /b к команде dir (показывать только имя, без даты/времени/атрибутов) и /a-d, чтобы исключить имена каталогов.

Вам не нужно использовать переменную (!var!) здесь (но вы можете, она отлично работает).

person Stephan    schedule 06.07.2014
comment
Стефан, ваш код будет возвращать результат для каждой строки в текстовом файле, и то же самое для каждого имени файла, верно? Пространства тоже будут проблемой. - person foxidrive; 06.07.2014
comment
@foxidrive: да, это то, что я понял из ОП if !var!==%%a echo good else echo search. А с пробелами вы правы - поправлю. - person Stephan; 06.07.2014
comment
Сначала я попробовал вышеописанное, для теста кода я использовал вывод команды dir, и он работал нормально. Когда я попробовал и остальную часть кода, он вернул список с шестнадцатью именами, что в пятнадцать раз превышает результат сравнения того же списка с шестнадцатью поисками и одним хорошим. - person ledlightjungled; 06.07.2014