【发布时间】:2022-01-03 08:24:10
【问题描述】:
我有一个文件夹和许多包含视频的子文件夹。一个子文件夹名为 Screenshots,其文件夹结构反映了视频子文件夹。每个视频都有一个 jpg 截图:filename.ext.jpg。其中一些 jpg 文件不再需要,因为相应的视频已被删除。
d:\folder1 - video1.mp4 - video2.mkv d:\folder2 d:\folder3 d:\screenshots\folder1 - video1.mp4.jpg - video2.mkv.jpg d:\screenshots\folder2 d:\screenshots\folder3
我创建它是为了查找和删除过时的 jpg。它保存带有完整路径的屏幕截图列表,减去 .jpg,然后从路径中删除屏幕截图文件夹,从而生成视频文件的路径列表。
然后它应该返回所有不再存在的视频文件的列表它这样做,但也列出了许多仍然存在的文件。
正在寻找解决此问题的方法,或者寻找更聪明的方法来完成任务。
谢谢。
set screenshotlist="%temp%\screenshot_work\screenshots.txt"
set folder=D:\screenshots
mkdir %temp%\screenshot_work
:: get list of screenshots without .jpg extension
for /f "delims=" %%f in ('dir %folder% /s /a-d /b') do echo %%~dpnf >>%screenshotlist%
:: edit screenshots.txt, remove "screenshots\"
call jrepl "screenshots\\" "" /f %screenshotlist% /i /o -
:: check if files exist in D:\
for /f "usebackqdelims=" %%f in (%screenshotlist%) do (if not exist %%f echo %%f needs to be deleted)
rd /s /q %temp%\screenshot_work
pause
【问题讨论】:
-
所以每个视频都有一个截图文件,对吧?这个呢:
for %%I in ("D:\root\screenshots\*.*.jpg") do set "FLAG=" & (for /D %%J in ("D:\root\*") do if exist "%%~J\%%~nI" set "FLAG=#") & if not defined FLAG ECHO del "%%~J"? -
我已经编辑了这个问题。每个视频一个屏幕截图,但视频位于子文件夹中,并且屏幕截图位于反映视频文件夹结构的子文件夹中。
-
好吧,如果截图放在子目录下,我需要调整一下我的建议:
for /R "D:\root\screenshots" %%I in ("*.*.jpg") do set "FLAG=" & (for /D %%J in ("D:\root\*") do if /I not "%%~nxI"=="screenshots" if exist "%%~J\%%~nI" set "FLAG=#") & if not defined FLAG ECHO del "%%~J"? -
@aschipfl 我不得不删除 \root,脚本运行,但我得到这个输出:del "%~J"?
-
是的,只是为了向您展示如果您删除大写的
ECHO命令会被删除的内容以供验证...
标签: windows batch-file command-prompt