У меня есть папка с именем Demos1
с файлами внутри, все они имеют расширение .replay
.
У меня есть пакетный скрипт в родительской папке Demos1
, а также файл с именами файлов, которые я ТОЛЬКО хочу сохранить в текстовом файле с именем namediff.txt
.
Я хочу рекурсивно сканировать каждое имя файла в namediff.txt
по файлам, найденным внутри каталога, и если имена файлов (по одному в строке) в namediff.txt
не соответствуют файлу, найденному в каталоге, удалить этот файл в Demos1
и оставить только файл имена, которые совпали в текстовом файле.
Это то, что у меня есть до сих пор.
PUSHD "%~dp0Demos1"
:--------------------------------------------------------------------------------------------
FOR /F "TOKENS=*" %%A IN ('DIR /B "*.replay"') DO (
FOR /F "TOKENS=*" %%G IN ('%%~nxA') DO (
IF NOT "%%~nxA"= = "%%~nxG" ECHO DEL "%%~nxG"
)
)
Да, файлы namediff.txt находятся в каталоге. Я хочу сохранить в каталоге только те файлы, которые соответствуют именам, найденным в namediff.txt.
FOR /F "TOKENS=*" %%A IN ('DIR /B /a-d "*.replay" ^|findstr /x /i /v /g:namediff.txt') DO echo del "%%A"
Должен сделать это. Findstr
находит строки, которые /x
точно соответствуют /i
без учета регистра /g:filecontainingstringstomatch
, а /v
выдает не-совпадения со списком файлов, сгенерированных dir
.
^
требуется для выхода из канала, который сообщает cmd
, что канал является частью команды, которая должна быть выполнена, а не for
.
/a-d исключает сопоставление имен каталогов - просто подход пояса и скобок.
del
просто echo
используется для тестирования. Удалите ключевое слово echo
после проверки, чтобы удалить файлы.
Я изменил это, чтобы удовлетворить мои потребности. Спасибо.
Имена файлов в
namediff.txt
простоname.ext
? Будет ли ваша партия просто удалять все файлы вdemos1
, в которых есть нет вnamediff.txt
?