用于删除没有视频文件的目录的Windows批处理文件

时间:2016-06-06 08:47:28

标签: windows batch-file

我使用Plex,当您点击“删除”按钮时,它只会删除视频文件。如果视频文件恰好位于文件夹中并带有字幕,那么所有垃圾都会被遗忘。因此,我正在尝试创建一个计划任务批处理文件,该文件将每天运行一次,以清理所有遗留垃圾。这是我到目前为止所提出的,但它似乎没有按预期工作:(

rem setting folder variables
set "mymov=E:\Movies\My"
set "hermov=E:\Movies\Her"
set "themmov=E:\Movies\Them"

set folders=%mymov% %hermov% %themmov%

set folder=nul

set delete=no

for %%f in (%folders%) do (
  cd /D %%f
  for /R %%d in (.) do (
    set folder=%%~fd
    for %%m in (*.mkv *.mp4 *.wtv *.avi) do (
      if exist %%~fd\%%m (
        goto :break
      else (
        set delete=yes
      )
    )
    :break
    if %delete%==yes (rd /S /Q %folder%)
    set delete=no
  )
)

**更新1:在Stephan和Rishav的帮助下,我已经提出了一个解决方案:

@echo off
setlocal EnableDelayedExpansion

rem setting folder variables
set "mymov=E:\Movies\My"
set "hermov=E:\Movies\Her"
set "themmov=E:\Movies\Them"

set folders="%mymov%" "%hermov%" "%themmov%"

for %%f in (%folders%) do (
  cd /D %%f
  for /D %%d in (*.*) do (
    set keep=no
    for %%m in (mkv mp4 wtv avi) do if exist %%~fd\*.%%m set keep=yes
    if !keep!==no rd /S /Q "%%~fd"
  )
)

**更新2:我实际上想扩展一下。有没有办法可以指定根文件夹,例如。 “E:\ Movies”,并智能地解密哪个是垃圾文件夹,哪个文件夹包含具有合法视频文件的子文件夹?例如。如果我将我的一个电影文件夹设置为“E:\ Movies \ My”,并且它有一堆电影文件夹,每个文件夹中都有视频文件(除非它已被删除,然后我的脚本将删除该文件夹),但是三部曲呢?假设我的“E:\ Movies \ My”文件夹中有“The Hobbit”,但它没有有效的视频文件,因为它是3个Hobbit电影的容器 - 我的脚本会删除整个“The Hobbit”文件夹,反过来,删除所有3部电影:(我希望那里的人比我对cmd脚本知道更多,并且可以放弃知识炸弹。也许试着弄清楚如何向后工作。 ,如果它找到一个视频文件,整个树是安全的,没有任何东西会被删除。

2 个答案:

答案 0 :(得分:1)

改变你的逻辑:

...
set keep=no
for %%m in (avi mp4 wtf mkv) do if exist "*.%%m" set keep=yes
if "!keep!"=="no" rd /S /Q "%%~fd"
...

答案 1 :(得分:0)

编辑:

@echo off
    rem setting folder variables
    set "mymov=D:\Movies\My"
    set "hermov=D:\Movies\Her"
    set "themmov=D:\Movies\Them"
    set folders=%mymov% %hermov% %themmov% 
    set ext=".mp4" ".mov" ".avi" 
    set test=0

    for %%f in (%folders%) do (
        echo "searching in %%f"
        cd /D %%f
        for %%i in (*.*) do (
                for %%b in (%ext%) do (
                if "%%~xi"==%%b (
                    set test=1
                    echo "match_found_not_deleting %%f")
             )
        )
        if %test%==0 (
            echo deleting %%f
            rd /s /q %%f
              )
    )

我想这个↑↑↑是你想要的。 旧材料(以防万一有用)↓↓↓

@echo off
setlocal EnableDelayedExpansion
set exclude=.avi.mp4.wtv.mkv.
for %%f in (*.*) do (
   if /I "%exclude%" == "!exclude:%%~Xf.=!" del "%%f"
)

我测试了它。 这将有效!
它将删除除四种格式之外的所有文件。 跟踪您正在使用的目录。

dbenham发布的以下代码也可以完成这项工作。 (未经测试)

@echo off
for /f %%F in ('dir /b /a-d ^| findstr /vile ".sdb .sbk .log .bat"') do del "%%F"
希望我能帮助你。