Пакетное удаление всех файлов, кроме частичных - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть командный файл, который постоянно проверяет, есть ли какие-либо файлы в каталоге:

    @echo off
    cls
    mode 15,5 
    cd C:\Users\Toni\Downloads\
    goto mark
:mark
    set var=2
    dir /b /a "Downloads\*" | >nul findstr "^" && (goto exin) || (goto mark1)
    goto mark
:mark1
    cls
    @ping -n 10 localhost> nul
    goto mark
:exin
    start /B C:\Users\Toni\Downloads\Test\download.bat
    exit

, если в этой папке есть какие-либо файлы, он перемещает их.

    @echo off
cls
cd C:\Users\Toni\Downloads\Downloads        
        xcopy /Y C:\Users\Toni\Downloads\Downloads\*.rar C:\Users\Toni\Downloads\Archive
        xcopy /Y C:\Users\Toni\Downloads\Downloads\*.zip C:\Users\Toni\Downloads\Archive
        xcopy /Y C:\Users\Toni\Downloads\Downloads\*.exe C:\Users\Toni\Downloads\Setups_usw
        xcopy /Y C:\Users\Toni\Downloads\Downloads\*.msi C:\Users\Toni\Downloads\Setups_usw
        xcopy /Y C:\Users\Toni\Downloads\Downloads\*.mp3 E:\-_MUSIC_-\Musik
        xcopy /Y C:\Users\Toni\Downloads\Downloads\*.wav E:\-_MUSIC_-\Musik
        xcopy /S /E /Y /EXCLUDE:C:\Users\Toni\Downloads\Test\excludedfileslist.txt C:\Users\Toni\Downloads\Downloads\*.* C:\Users\Toni\Downloads\Sonstiges
    goto err        
    :err
    if errorlevel 1 ( dir /arashd >> "C:\Users\Toni\Downloads\Test\somefile.txt" 2>&1  ) else ( del /[!*.part] * )
    goto end
    :end
    start /B C:\Users\Toni\Downloads\Test\run.cmd
    exit

Однако я не хочу перемещать файлы, которые находятся в процессе загрузки (т. Е. Я не хочу перемещать частичные файлы с расширением .part).

Я пытался использоватьАргумент команды del выглядит следующим образом:

del /[!*.part] *

, но, похоже, он не работает.

Как избежать перемещения частичных файлов с расширением .part?

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Другое возможное решение (короче, чем у @ mojo):

@echo off
cd /d C:\Users\Toni\Downloads\Downloads
attrib +h *.part
for /f "delims=" %%A IN ('dir /b /A:-H') do del %%A
attrib -h *.part

Это позволит скрыть все .part файлы, удалить все остальные файлы и снова удалить скрытый атрибут.

0 голосов
/ 24 декабря 2018

Я бы, вероятно, посмотрел на расширение файла (используя «подстановку переменных FOR»).

SET "TARGET_DIR=C:\Users\Toni\Downloads\Downloads"
FOR /F "delims=" %%f IN ('dir /b "%TARGET_DIR%"') DO (
    REM  Ensure it doesn't have '.part' as an extension.
    IF NOT "%%~xf"==".part" (
        REM  Ensure there's not a corresponding ".part" file.
        IF NOT EXIST "%TARGET_DIR%\%%~f.part" (
            DEL "%TARGET_DIR%\%%~f"
        )
    )
)

Это удалит любой файл в TARGET_DIR, который не имеет «.part» какрасширение файла или иметь соответствующий файл ".part".(По моему опыту загрузчики, которые выполняют функцию «.part», также резервируют имя «готового» файла, который вы, вероятно, не хотите удалять.)

...