Как удалить вновь созданные файлы в пакетном файле - PullRequest
0 голосов
/ 22 мая 2019

Мне нужно удалить файлы в зависимости от того, что было создано по этому пути.

В нашем случае у нас будет несколько файлов по определенному пути.После запуска нашего приложения оно создаст новые файлы.Мне нужно удалить только эти новые файлы.

Изначально мы думали сделать все существующие файлы доступными только для чтения.Таким образом, удаление файла *.* удалит только новые файлы.Но эта опция исключена, в нашем проекте мы не можем сделать файлы доступными только для чтения.

Поэтому я пытаюсь найти другой способ удалить эти новые файлы.

1 Ответ

1 голос
/ 22 мая 2019

Это кажется более или менее тем, что вам требуется:

@echo off
set newfile=
set oldfile=
:start
for /f %%i in ('dir *.txt /b /a-d /o-d') do set "newfile=%%i" & goto reveal
:reveal
if not defined oldfile set "oldfile=%newfile%"
if not "%newfile%"=="%oldfile%" (
    echo deleting %newfile%
    del %newfile% /Q
    set oldfile=
)
timeout /t 3 /nobreak>nul 2>&1
goto start

Он будет работать в постоянном цикле и каждые три секунды будет подсвечивать каталог для новых файлов .txt.После обнаружения он выдает deleting file.txt и удаляет файл.

очевидно, что при необходимости вы можете увеличить значение timeout.

Чтобы проверить это, поместите его в любой каталог и запуститескрипт.откройте проводник и перейдите в каталог и создайте новый файл test.txt и посмотрите, как он исчезает.

Редактировать В зависимости от необходимости удаления нескольких файлов:

создатьодин пакетный файл, который будет выполнять списки файлов, вам нужно обновить пути к каталогам в демонстрационных путях ниже. Затем запустите этот скрипт один раз, чтобы создать файл exclusion.txt в каталоге %temp%.

@echo off
dir /b "C:\directory">"%temp%\exclusion.txt"
dir /b "C:\directory 2">>"%temp%\exclusion.txt"
dir /b "D:\directory 3">>"%temp%\exclusion.txt"

Теперь скопируйте этот файл в каждый из каталогов, из которых вы хотите удалить материал:

@echo off
set cnt=0 & set excl= & set ext=
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%a in ("%temp%\exclusion.txt") do (
    set /a cnt+=1   
    set "nlr!cnt!=%%a"
)
for /l %%i in (1,1,%cnt%) do (
    if not defined excl (
         set "excl=!nlr%%i!"
    ) else (
         set "excl=!excl! !nlr%%i!"
   )
)
for /f "delims=" %%i in ('dir /b /a-d ^|findstr /VIE "%excl%"') do (
     if /i not "%%i"=="exclusion.txt" if not "%%i"=="%~0" echo del "%%i"
)

Итак, теперь все файлы в каталоге будут удалены, если тольконаходится в exclusion.txt

На данный момент, это решение будет только echo команда del, как только вы будете удовлетворены, оно удалит только то, что предназначено для удаления, вам нужно удалить echo извторая последняя строка.

Наконец, если вам когда-нибудь понадобится добавить новые файлы в каталоги, которые не следует удалять, просто перезапустите dir командный файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...