【问题标题】:Batch deleting every file except partial files批量删除除部分文件外的所有文件
【发布时间】:2018-12-24 15:14:36
【问题描述】:

我有一个批处理文件,它不断检查目录中是否有任何文件:

    @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 扩展名的部分文件?

【问题讨论】:

    标签: batch-file cmd xcopy del


    【解决方案1】:

    我可能会查看文件扩展名(使用“替换 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,这是你的代码,我会留着用它,当然这是一个 normal 循环 + paranoiac 循环 + 精神病态循环!太好了,upv...谢谢!
    【解决方案2】:

    另一种可能的解决方案(比@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文件,删除所有其他文件并再次删除隐藏属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      相关资源
      最近更新 更多