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

#windows #batch-file #cmd #windows-xp

#Windows #пакетный файл #cmd #windows-xp

Вопрос:

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

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

Цель такова

 @echo off
setlocal enabledelayedexpansion
for /f "delims=" %%b in ('dir "C:A Folder"') do set var=%%~nb amp; 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 amp; 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
  

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

Ответ №1:

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

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

pause
  

Комментарии:

1. Я бы использовал findstr /x вместо просто find

2. @Stephan Вам также нужно использовать /c , потому что термин может содержать пробелы, но они оба будут работать.

3. Для этого кода я сделал параметр /a-d из команды dir пустым, поэтому было показано название папки, и можно было показать разницу. Вывод показал, что найдено для каждого сравниваемого перечисленного имени и не найдено для имени папки, которого не было в сохраненном списке.

4. У меня нет вашего текстового файла или содержимого вашей папки, поэтому я понятия не имею, что вы сравниваете.

Ответ №2:

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

 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! ) (но вы можете, она отлично работает).

Комментарии:

1. Стефан, твой код вернет результат для каждой строки в текстовом файле, и то же самое для каждого имени файла, верно? Пробелы тоже будут проблемой.

2. @foxidrive: да, это то, что я понял из OP if !var!==%%a echo good else echo search . И вы правы с пробелами — я исправлю это.

3. Сначала я попробовал вышеупомянутый вариант, для тестирования кода я использовал вывод команды dir, и это сработало нормально. Когда я попробовал остальную часть кода, он вернул список с шестнадцатью именами, что в пятнадцать раз превышает результат сравнения того же списка с шестнадцатью поисковыми и одним хорошим.