Удалить все файлы в папке, кроме тех, которые имеют определенный префикс.

Удалить все файлы в папке, кроме тех, которые имеют определенный префикс.

У меня есть папка, которая заполняется автоматически сгенерированными файлами приложением. Там создаются и хранятся расширения csv и png. Нам нужно удалить все файлы в папке, кроме определенных файлов png, имя которых начинается с "abc-". Система представляет собой коробку Windows Server 2012 r2, и цель состоит в том, чтобы делать это через пакетный файл с использованием планировщика задач каждую ночь.

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

решение1

Можете попробовать powershell? Что-то вроде:

$path = "C:\site\temp"
gci -Path $path | ? {!($_.Name -ilike "abc-*.png")} | % { Remove-Item -Path $_.FullName }

решение2

С помощью Batch это можно сделать следующим образом:

@Echo OFF 

For %%# In ("*.*") DO (
    If /I "%%~x#" EQU ".png" (
        (Echo "%%~n#"| Findstr "^abc-")1>nul 2>&1 || (
            Del /Q "%%~#"
        )
    )
)


Pause&Exit

Я перебираю все файлы (имеющие расширение), затем, если файл имеет расширение «.png», я проверяю, начинается ли имя файла с «abc-», чтобы исключить его.

Перед тестированием сделайте резервную копию вашей папки.

решение3

Также, пожалуйста, сделайте резервную копию содержимого папки, с которой вы работаете, перед тестированием.

Шаг первый: Создайте подкаталог в нужной папке.
Шаг второй: Переместите файлы для сохранения в этот подкаталог.
Шаг третий: Удалите все оставшееся в папке.
Шаг четвертый: Переместите файлы из подкаталога обратно в папку.
Шаг пятый: Удалите подкаталог.
Шаг шестой: Посмотрите, что у вас есть.

Ниже приведен простой сценарий.

REM C:\SCRIPTS\MOVERPNG.CMD
C:
ECHO OFF
CLS
CD \SITE\TEMP 
MD BAR  
MOVE /y ABC-*.PNG \SITE\TEMP\BAR  
DEL /y *.PNG  
DEL /y *.CSV  
CD BAR  
MOVE *.PNG C:\SITE\TEMP 
CD ..  
RD /q BAR
ECHO MOVERPNG has completed.
DIR *.* /P /O:N 

Связанный контент