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

Опитвам се да подобря прегледа на моето търсене и да намеря спомени за пакетни файлове в средата на командния ред на 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 на OP. И си прав за интервалите - ще го коригирам. - person Stephan; 06.07.2014
comment
Първо опитах горния, за тест на кода използвах изхода на командата dir и той работи добре. Когато опитах и ​​останалата част от кода, той се върна за списъка с шестнадесет имена, петнадесет пъти по-голям от изхода за сравнение на същия списък с шестнадесет търсене и едно добро. - person ledlightjungled; 06.07.2014