Пакетное удаление всех файлов, кроме частичных
У меня есть командный файл, который постоянно проверяет, есть ли какие-либо файлы в каталоге:
@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 ответа
Я бы, наверное, посмотрел на расширение файла (используя "подстановку переменных 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", также резервируют имя "готового" файла, который вы, вероятно, не хотите удалять.)
Другое возможное решение (короче, чем у @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
файлы, удалите все остальные файлы и снова удалите скрытый атрибут.