我使用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脚本知道更多,并且可以放弃知识炸弹。也许试着弄清楚如何向后工作。 ,如果它找到一个视频文件,整个树是安全的,没有任何东西会被删除。
答案 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"
希望我能帮助你。