Batch file 批处理文件以从特定命名文件夹中删除AVI文件

Batch file 批处理文件以从特定命名文件夹中删除AVI文件,batch-file,Batch File,我希望通过删除不需要的视频(AVI)文件来整理完整的存档驱动器 我需要做的是从主目录的文件夹和子文件夹中删除AVI文件。但是,我不想从文件夹名称中包含文本“PG”的任何文件夹中删除AVI文件-通常为“G1244A PG报告”的形式,但识别代码(在本例中为“G1244A”)的长度可能不同。 谢谢 在@tftd注释后添加: 以下是我迄今为止所做的努力(决定移动视频,而不是删除它们)。看起来不错,但不是很优雅: FOR /d /r %%d IN (*) DO ( ECHO "%%~nxd"|FIND

我希望通过删除不需要的视频(AVI)文件来整理完整的存档驱动器

我需要做的是从主目录的文件夹和子文件夹中删除AVI文件。但是,我不想从文件夹名称中包含文本“PG”的任何文件夹中删除AVI文件-通常为“G1244A PG报告”的形式,但识别代码(在本例中为“G1244A”)的长度可能不同。 谢谢

在@tftd注释后添加: 以下是我迄今为止所做的努力(决定移动视频,而不是删除它们)。看起来不错,但不是很优雅:

FOR /d /r %%d IN (*) DO (
ECHO "%%~nxd"|FIND " PG " >NUL
IF ERRORLEVEL 1 (ECHO Non-PG folder...move  vids in "%%d"
       Set NONPGFOLDER=%%d
       ECHO !NONPGFOLDER!
       DIR  "!NONPGFOLDER!\*.avi"
       MOVE "!NONPGFOLDER!\*.avi" "C:\AVIfiles\"
)ELSE (ECHO     PG folder...do nothing in "%%d"
)
)

PAUSE
Exit

Stack Overflow不是一个免费的代码编写服务,如果你花上几分钟进行搜索,你很可能会找到这个简单任务所需的代码

@echo off
setlocal EnableDelayedExpansion
for /F "delims=" %%F in ('dir /A-D /B /S "F:\*.avi" 2^>nul') do (
    set "FilePath=%%~dpF"
    if "!FilePath:PG=!" == "!FilePath!" echo del /F "%%F"
)
endlocal
pause
带有选项
/A-D/B/S
的命令DIR返回驱动器
F:
上找到的AVI文件的文件名列表,具有完整路径且不带双引号,即使对于包含1个或多个空格的完整文件名也是如此

每个文件的路径都指定给一个环境变量

如果删除了所有出现的
PG
不区分大小写的文件路径等于未修改的文件路径,则文件路径中没有包含
PG
的文件夹,因此可以删除此文件

在上述代码中,在命令del之前有命令echo,使您可以在不使用echo暂停的情况下使用批处理文件之前验证删除列表

以下建议的替代解决方案:

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • del/?
  • dir/?
  • echo/?
  • endlocal/?
  • 获取/?
  • 如果/?
  • 设置/?
  • setlocal/?

您好@Tox,欢迎来到StackOverflow。请花点时间阅读。提问时,请提供代码、错误日志和问题说明。否则我们会认为你在试图让开发者免费为你工作!你好@tftd。谢谢你的建议。我对StackOverflow一无所知。我已经编辑了我的问题,不客气。我向上投票:)在(*.avi)中使用
for/r,而不是在
dir
输出上使用
for/f
。在正确处理空格的同时,根据控制台窗口的字体设置,对于包含Unicode的文件名,此操作仍将失败。
@echo off
setlocal EnableDelayedExpansion
for /R "F:\" %%F in (*.avi) do (
    set "FilePath=%%~dpF"
    if "!FilePath:PG=!" == "!FilePath!" echo del "%%F"
)
endlocal