永发信息网

帮忙写一个批处理脚本代码,作用是删除指定时间长的文件

答案:2  悬赏:30  手机版
解决时间 2021-01-25 23:27
  • 提问者网友:城市野鹿
  • 2021-01-25 15:57
在一个文件夹里面有若干个视频文件,要求批处理 ,删除少于35 秒和多于13分钟的文件
最佳答案
  • 五星知识达人网友:行雁书
  • 2021-01-25 17:04
@echo off & title 删除指定时长的视频 By 依梦琴瑶
::设置处理目录
set WorkDir=E:\Videos

::设置最大时长
set MaxTime=00:13:00

::设置最小时长
set MinTime=00:00:35

ver|find "5.1.">nul && set "V=21" || set "V=27"
(echo set f=CreateObject^("Shell.Application"^).NameSpace^(WScript.Arguments^(0^)^)
echo WSH.Echo^(f.GetDetailsOf^(f.ParseName^(WScript.Arguments^(1^)^),WScript.Arguments^(2^)^)^))>"%tmp%\GetTimeDetails.vbs"
cd /d "%WorkDir%"
for %%a in (*.3gp,*.avi,*.mp4,*.wmv) do (
    for /f "tokens=1-3 delims=:" %%b in ('cscript //nologo "%tmp%\GetTimeDetails.vbs" "%WorkDir%" "%%~a" "%V%"') do (
        if %%b%%c%%d gtr %MaxTime::=% (
            call :DelFile "%%~a"
        ) else (
            if %%b%%c%%d lss %MinTime::=% (
                call :DelFile "%%~a"
            )
        )
    )
)
pause
exit

:DelFile
del /f /q "%~1" >nul 2>nul && (
    echo 已成功删除 "%~1"
) || (
    echo "%~1" 可能被占用,无法被删除。
)
goto :eof

由于系统原因,仅支持几种视频格式的时长获取,那些flv,mkv等视频是无法获取时长的。
全部回答
  • 1楼网友:风格不统一
  • 2021-01-25 17:47
呵呵,我空间放了个计算日期的例子,正好用在你这问题上,批处理可放任意位置,已经注释得很细了,需要的话再单独hi一下: @echo off&setlocal enabledelayedexpansion :: 下两行为分别假定的天数和处理文件夹名,请自己修改 set ds=7 set di=d:\abc set "dy=%date:~,4%" set "dm=%date:~5,2%" set "dd=%date:~8,2%" echo 当前日期为:%dy%年%dm%月%dd%日 echo. if %dm:~,1%==0 set "dm=%dm:~1%" if %dd:~,1%==0 set "dd=%dd:~1%" set/a "dd-=ds" if !dd! gtr 0 goto ok echo 正在计算%ds%天前的日期... :ry set /a "feb=^!(!dy!&3)+28" if "%dy:~2,2%" equ "00" set/a "feb=feb-1+^!(dy:~,2&3)" if %feb%==29 echo %dy%年是闰年 echo. :tyt set n=0 set/a "dm-=1" if %dm% equ 0 ( set/a "dy-=1,dm=12,dd+=31" if %dd% gtr 0 (goto ok )else goto ry ) for %%a in (31 %feb% 31 30 31 30 31 31 30 31 30 31) do ( set/a n+=1 if !n! equ %dm% set/a "dd+=%%a") if %dd% leq 0 goto tyt :ok set/a "ymd=dy*10000+dm*100+dd" echo. echo 前%ds%天的日期是%ymd:~,4%年%ymd:~4,2%月%ymd:~6,2%日 echo 正在获取文件日期再进行比较 echo 并删除%ds%天前创建并且%ds%天内未修改过的文件... cd/d "%di%" for /f "delims=" %%i in ('dir/a/a-d/b')do ( set ymdx=%%~ti set ymdx=!ymdx~,4!!ymdx~5,2!!ymdx~8,2! if !ymdx! lss %ymd% ( if "%%i" neq "%~nx0" del/f "%%i")) echo. echo处理完毕!即将退出... ping /n 5 127.1>nul 修改了一下,不会删除本批处理
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯