Удалять файлы, если имена не соответствуют частям строк в текстовом файле - Пакет Windows
Я могу найти все эти строки по: findstr /r /c: "..: ..: .. case"
Я могу поместить их в другой файл .txt, добавив в конце:> file.txt
Я пробовал несколько кодов с командой "for", но синтаксис для меня слишком сложный.
Я собрал цикл FOR /F, который использует этот file.txt
со строками, которые вы создаете, чтобы перебрать эти значения содержимого этого файла, чтобы временно скопировать строки (как имена файлов) с добавленным .jpg
другом месте (первоначально он удалил те ) - это то, что вы подтвердили, что работаете и повторяете команду удаления из моих комментариев.
Ваш комментарий
удаляет файлы jpg, находящиеся в текстовом файле. Теперь, как я хочу, чтобы не удалить эти файлы, но чтобы удалить все остальные
Список строк повторяется, поэтому я не уверен, как легко добавить логику IF пакетного сценария и сказать удалить этот файл (один за другим), если он не равен ЛЮБОМУ значению строки из списка строк имени файла (один- один на один здесь бы не работал)- PowerShell был бы другой историей, хотя я уверен.
Таким образом, копирование в метод временного рабочего каталога, кажется, работает хорошо, поэтому протестируйте его и посмотрите, как оно работает, но когда я запустил его несколько раз, он работал так же, как и ожидалось с тем, как у меня есть логика в примере пакетного сценария, чтобы получить окончательный и ожидаемый результат, как вы объяснили через оригинальный вопрос и ваши комментарии впоследствии.
Обратите внимание, что вам НУЖНО запускать этот файл как файл .bat
или .cmd
а не копировать и вставлять его в командную строку вручную, поскольку для этого метода требовалась команда CALL .
Пример пакетного скрипта
@ECHO ON
SET SourcePath=C:\Path
SET WorkPath=C:\Path\TempWork
IF NOT EXIST "%WorkPath%" MD "%WorkPath%"
IF EXIST "%WorkPath%\*.jpg" DEL /Q /F "%WorkPath%\*.jpg"
FOR /F "TOKENS=*" %%A IN (
C:\Path\file.txt
) DO (
CALL :Routine1 "%%~NXA.jpg"
)
DEL /Q /F "%SourcePath%\*.jpg"
XCOPY /F /Y "%WorkPath%\*.jpg" "%SourcePath%\"
IF EXIST "%WorkPath%\*.jpg" DEL /Q /F "%WorkPath%\*.jpg"
GOTO EOF
:Routine1
XCOPY /F /Y "%SourcePath%\%~1" "%WorkPath%\"
GOTO EOF
Примечания сценария /Gotchas:
- Вы можете использовать только имя файла со строковыми значениями (file.txt) или полный путь. Только убедитесь, что вы НЕ ставите двойные кавычки вокруг этого, иначе он не читает значения содержимого файла. Это может означать, что если вы используете полный путь, а не неявное имя файла для
file.txt
то этот путь, включая любые имена папок и имя файла, НЕ ДОЛЖЕН содержать пробелов.
- Убедитесь, что
SET SourcePath=C:\Path
равен допустимому пути к файлу (здесь или без пробелов все в порядке), где существуют файлы, которые вы хотите сохранить (исходный путь).
- Убедитесь, что
SET WorkPath=C:\Path\TempWork
соответствует допустимому пути к файлу (с пробелами или без них, здесь хорошо), где файлы, которые вы хотите сохранить, будут временно скопированы до тех пор, пока другие файлы не будут удалены, а затем скопированы обратно в исходный путь к источнику.
- Вам нужно будет убедиться, что контекст безопасности, выполняющий этот пакетный сценарий, имеет доступ ко всем применимым файлам и папкам для успешной обработки всех операций логики пакетной команды.