写个bat删除指定文件夹下某天前所有文件信息
比如:删除E:\DiffZipRUL下2天前变更过的所有文件能在windowsserver2008下能运行(坐等)50分,满意再送50比如:E:\DiffZipRUL目录...
比如:删除E:\DiffZipRUL下2天前变更过的所有文件
能在windows server 2008下能运行
(坐等)50分,满意再送50
比如:E:\DiffZipRUL目录下有A、B、C文件或文件夹,B昨天修改过,A,C2天类没有修改过,执行Bat后会删除A、C,B不会被删除,因为2天内修改过
非bat也行,比如C#小外挂程序也可以~ 展开
能在windows server 2008下能运行
(坐等)50分,满意再送50
比如:E:\DiffZipRUL目录下有A、B、C文件或文件夹,B昨天修改过,A,C2天类没有修改过,执行Bat后会删除A、C,B不会被删除,因为2天内修改过
非bat也行,比如C#小外挂程序也可以~ 展开
2个回答
展开全部
@echo off
::搜索并显示指定目录下(当前日期-修改日期>两天)的文件
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=/ " %%a in ('echo %date%') do set tday=%%a%%b%%c
::测试路径E:\DiffZipRUL,测试子目录搜索
::dir /s/b/a-d-h显示当前目录下的文件(子目录,简单格式,不显示目录,不显示隐藏文件
for /f "tokens=1 delims=" %%a in ('dir /s/b/a-d-h "E:\DiffZipRUL"') do (
set fname=%%a
::dir /tw显示修改时间
for /f "tokens=1-3,6 delims=/ " %%b in ('dir /tw "!fname!"^|findstr/v "字节"^|findstr/v "目录"^|findstr/v "卷"^|findstr/v "DIR"') do (
::取文件修改日期,然后+2表示两天的时间差
set /a fday=%%b%%c%%d
set /a fday+=2
::如果文件修改日期加上两天还是比当前日期小,那么表示修改于两天前,这里用echo !fname!显示符合条件的文件,以作调试,实际应用时改成需要的动作,比如删除就写作del "!fname!" /Q这样
if !fday! lss !tday! (echo "!fname!")
)
)
pause
::搜索并显示指定目录下(当前日期-修改日期>两天)的文件
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=/ " %%a in ('echo %date%') do set tday=%%a%%b%%c
::测试路径E:\DiffZipRUL,测试子目录搜索
::dir /s/b/a-d-h显示当前目录下的文件(子目录,简单格式,不显示目录,不显示隐藏文件
for /f "tokens=1 delims=" %%a in ('dir /s/b/a-d-h "E:\DiffZipRUL"') do (
set fname=%%a
::dir /tw显示修改时间
for /f "tokens=1-3,6 delims=/ " %%b in ('dir /tw "!fname!"^|findstr/v "字节"^|findstr/v "目录"^|findstr/v "卷"^|findstr/v "DIR"') do (
::取文件修改日期,然后+2表示两天的时间差
set /a fday=%%b%%c%%d
set /a fday+=2
::如果文件修改日期加上两天还是比当前日期小,那么表示修改于两天前,这里用echo !fname!显示符合条件的文件,以作调试,实际应用时改成需要的动作,比如删除就写作del "!fname!" /Q这样
if !fday! lss !tday! (echo "!fname!")
)
)
pause
更多追问追答
追问
运行结果:
运算符不存在。
无效数字。数字常数只能是十进制(17),十六位进制(0x11)或
八进制(021)。
请按任意键继续. . .
追答
这样,昨天是在WIN7下调试的,因为WIN7的时间显示用斜杠分隔,而2008可能是用减号分隔的,所以会出现运算符不存在,刚才在2003下测试了一下(实在是没有2008的环境),把两处delims=/ "替换成delims=- ",运行通过。虽然没用过2008这样的高级货,我觉得还是可以再尝试一下。
另外,第三条for命令:for /f "tokens=1-3,6 ...这一句中的,6没有用到,可以去除改成for /f "tokens=1-3 ...。
另外,for /f "tokens=1 delims=" %%a in ('dir /s/b/a-d-h "E:\DiffZipRUL"') do (这一句里排除了目录和隐藏文件,如果需要的话,请把dir搜索参数改成dir /s/b/a,然后删除目录用rd "!fname!" /s/q,而且删除目录可能要执行两次(如目录中有子目录的话),但是目录修改时间不会随着目录下文件的修改而改变,所以不建议用这样的方式删除目录。
看了下那个附件,用forfiles确实是简单有效的办法,只要一条命令就完事了,
forfiles /p 路径 /m 文件通配规则 /s /d 与当前日期差值(前两天就是-2) /c 执行的动作
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询