这个文件夹每个星期六会产生10几个压缩包(是通过批处理写的,备份D区的数据)
由于磁盘空间有限,所以要定期删除压缩包。
能不能通过批处理写一个程序
输入指定的日期,比如:2013-09-01.
然后在这日期之前的压缩包都自动删除。
只保留9月1号以后的压缩包。
希望会的朋友指点迷津。谢谢。
21 个解决方案
#1
@for /F "delims=*" %%a in ('dir /b /a-d *.rar *.zip *.7z') do @if %%~ta lss 2013-09-01 del %%a
#2
xp以上系统有forfiles命令的话,可以直接用,没有的话,去高版本系统下拷这个命令
删除2013-09-01之前的文件(包含2013-09-01)
或者指定N天之前,其中的
/d -"%input%"
~~~~~~~~~~~~~~~~~~~~
/d -30
表示30天之前
删除2013-09-01之前的文件(包含2013-09-01)
set /p input=输入指定的日期(如:2013-09-01):
forfiles /p "e:\backup" /m *.rar /d -"%input%" /c "cmd /c echo 正在删除:[@file] 该文件上次修改时间:[@fdate @ftime]&& del /f @path"
或者指定N天之前,其中的
/d -"%input%"
~~~~~~~~~~~~~~~~~~~~
/d -30
表示30天之前
#3
可以在WIN2003系统里拷贝吗?如果可以,那个命令是在哪的?该拷到XP系统哪个位置?
#4
系统是WIN XP的!
#5
2003系统有,在系统system32目录下
#6
set SrcDir=E:\software
set DaysAgo=7
forfiles /p %SrcDir% /s /m *.* /d-%DaysAgo% /c "cmd /c del/f/q/a @path"
pause
我这样写命令,您看对吗?怎么双击BAT文件,没反应,我想删除7天前E区software里的文件。
set DaysAgo=7
forfiles /p %SrcDir% /s /m *.* /d-%DaysAgo% /c "cmd /c del/f/q/a @path"
pause
我这样写命令,您看对吗?怎么双击BAT文件,没反应,我想删除7天前E区software里的文件。
#7
set SrcDir=E:\software
set DaysAgo=7
forfiles /p "%SrcDir%" /d -%DaysAgo% /c "cmd /c echo 正在删除:[@file] 该文件上次修改时间:[@fdate @ftime] && del /f @path"
set DaysAgo=7
forfiles /p "%SrcDir%" /d -%DaysAgo% /c "cmd /c echo 正在删除:[@file] 该文件上次修改时间:[@fdate @ftime] && del /f @path"
#8
呵呵,我研究好了,原来是这样
set SrcDir=E:\software
set DaysAgo=7
forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c del /f /q /a @path"
我还有一个问题,这个批处理,只是删除E区下SOFTWARE文件夹里的文件,并不删除里面的文件夹,如果想文件夹都删除,怎么写?
set SrcDir=E:\software
set DaysAgo=7
forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c del /f /q /a @path"
我还有一个问题,这个批处理,只是删除E区下SOFTWARE文件夹里的文件,并不删除里面的文件夹,如果想文件夹都删除,怎么写?
#9
forfiles /p ....
~~~~~~~~~~~~~~~~~~~~~~~~~
forfiles /s /p ....
~~~~~~~~~~~~~~~~~~~~~~~~~
forfiles /s /p ....
#10
我搞错了,是要删除目录,后面再加 && rd /s /q @path就好了
forfiles /p %SrcDir% /s /d -%DaysAgo% /c "cmd /c del /f /q /a @path && rd /s /q @path"
forfiles /p %SrcDir% /s /d -%DaysAgo% /c "cmd /c del /f /q /a @path && rd /s /q @path"
#11
加上你那句话,双击BAT文件,就一直提示“系统找不到指定的文件”。我的SOFTWARE文件夹里是有几个文件夹,都是7天前的。请问何解?
#12
不用管它的,&& 这个是依次执行两条命令,其中一条命令可能执行不成功,但不影响结果
我这里测试,文件夹、文件都可以删除
我这里测试,文件夹、文件都可以删除
#13
好的,谢谢你。
#14
对了,你知道命令末尾为什么一定要加@path吗?
#15
@path是forfiles命令中/c 参数变量
默认命令是 "cmd /c echo @file"。下列变量
可以用在命令字符串中:
@file - 返回文件名。
@fname - 返回不带扩展名的文件名。
@ext - 只返回文件的扩展。
@path - 返回文件的完整路径。
@relpath - 返回文件的相对路径。
@isdir - 如果文件类型是目录,返回 "TRUE";如果是文件,返回 "FALSE"。
@fsize - 以字节为单位返回文件大小。
@fdate - 返回文件上一次修改的日期。
@ftime - 返回文件上一次修改的时间。
默认命令是 "cmd /c echo @file"。下列变量
可以用在命令字符串中:
@file - 返回文件名。
@fname - 返回不带扩展名的文件名。
@ext - 只返回文件的扩展。
@path - 返回文件的完整路径。
@relpath - 返回文件的相对路径。
@isdir - 如果文件类型是目录,返回 "TRUE";如果是文件,返回 "FALSE"。
@fsize - 以字节为单位返回文件大小。
@fdate - 返回文件上一次修改的日期。
@ftime - 返回文件上一次修改的时间。
#16
我把WIN7(32位)里的forfiles,放到XP(32位)里的system32里,双击批处理提示不是有效的WIN32应用程序哦。
#17
搞后了,拿win2003的forfiles即可。
#18
可不可以再这段程序的基础上加一个判断条件,但该分区的剩余容量小于10G时,才执行以下命令:
set SrcDir=E:\software
set DaysAgo=7
forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c del /f /q /a @path"
你懂吗?
#19
@echo off
set vol=E
for /f "tokens=2* delims=:" %%a in ('fsutil volume diskfree %vol%:') do set free=%%a
set free=%free:~0,-6%
echo %free%
if %free% lss 10000 echo 这个逻辑盘空间不足10G
set vol=E
for /f "tokens=2* delims=:" %%a in ('fsutil volume diskfree %vol%:') do set free=%%a
set free=%free:~0,-6%
echo %free%
if %free% lss 10000 echo 这个逻辑盘空间不足10G
#20
可以解释下吗?感激不尽。
#21
我网上查了一些资料,明白了一些。不过还有几点不明白
1."tokens=2* delims=:"这个分割的地方我看不懂,2*是不是指E区的所有空间?:呢?
2.%free:~0,-6%这句语法应该怎么理解?网上都找不到相关解释。谢谢。
#1
@for /F "delims=*" %%a in ('dir /b /a-d *.rar *.zip *.7z') do @if %%~ta lss 2013-09-01 del %%a
#2
xp以上系统有forfiles命令的话,可以直接用,没有的话,去高版本系统下拷这个命令
删除2013-09-01之前的文件(包含2013-09-01)
或者指定N天之前,其中的
/d -"%input%"
~~~~~~~~~~~~~~~~~~~~
/d -30
表示30天之前
删除2013-09-01之前的文件(包含2013-09-01)
set /p input=输入指定的日期(如:2013-09-01):
forfiles /p "e:\backup" /m *.rar /d -"%input%" /c "cmd /c echo 正在删除:[@file] 该文件上次修改时间:[@fdate @ftime]&& del /f @path"
或者指定N天之前,其中的
/d -"%input%"
~~~~~~~~~~~~~~~~~~~~
/d -30
表示30天之前
#3
可以在WIN2003系统里拷贝吗?如果可以,那个命令是在哪的?该拷到XP系统哪个位置?
#4
系统是WIN XP的!
#5
2003系统有,在系统system32目录下
#6
set SrcDir=E:\software
set DaysAgo=7
forfiles /p %SrcDir% /s /m *.* /d-%DaysAgo% /c "cmd /c del/f/q/a @path"
pause
我这样写命令,您看对吗?怎么双击BAT文件,没反应,我想删除7天前E区software里的文件。
set DaysAgo=7
forfiles /p %SrcDir% /s /m *.* /d-%DaysAgo% /c "cmd /c del/f/q/a @path"
pause
我这样写命令,您看对吗?怎么双击BAT文件,没反应,我想删除7天前E区software里的文件。
#7
set SrcDir=E:\software
set DaysAgo=7
forfiles /p "%SrcDir%" /d -%DaysAgo% /c "cmd /c echo 正在删除:[@file] 该文件上次修改时间:[@fdate @ftime] && del /f @path"
set DaysAgo=7
forfiles /p "%SrcDir%" /d -%DaysAgo% /c "cmd /c echo 正在删除:[@file] 该文件上次修改时间:[@fdate @ftime] && del /f @path"
#8
呵呵,我研究好了,原来是这样
set SrcDir=E:\software
set DaysAgo=7
forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c del /f /q /a @path"
我还有一个问题,这个批处理,只是删除E区下SOFTWARE文件夹里的文件,并不删除里面的文件夹,如果想文件夹都删除,怎么写?
set SrcDir=E:\software
set DaysAgo=7
forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c del /f /q /a @path"
我还有一个问题,这个批处理,只是删除E区下SOFTWARE文件夹里的文件,并不删除里面的文件夹,如果想文件夹都删除,怎么写?
#9
forfiles /p ....
~~~~~~~~~~~~~~~~~~~~~~~~~
forfiles /s /p ....
~~~~~~~~~~~~~~~~~~~~~~~~~
forfiles /s /p ....
#10
我搞错了,是要删除目录,后面再加 && rd /s /q @path就好了
forfiles /p %SrcDir% /s /d -%DaysAgo% /c "cmd /c del /f /q /a @path && rd /s /q @path"
forfiles /p %SrcDir% /s /d -%DaysAgo% /c "cmd /c del /f /q /a @path && rd /s /q @path"
#11
加上你那句话,双击BAT文件,就一直提示“系统找不到指定的文件”。我的SOFTWARE文件夹里是有几个文件夹,都是7天前的。请问何解?
#12
不用管它的,&& 这个是依次执行两条命令,其中一条命令可能执行不成功,但不影响结果
我这里测试,文件夹、文件都可以删除
我这里测试,文件夹、文件都可以删除
#13
好的,谢谢你。
#14
对了,你知道命令末尾为什么一定要加@path吗?
#15
@path是forfiles命令中/c 参数变量
默认命令是 "cmd /c echo @file"。下列变量
可以用在命令字符串中:
@file - 返回文件名。
@fname - 返回不带扩展名的文件名。
@ext - 只返回文件的扩展。
@path - 返回文件的完整路径。
@relpath - 返回文件的相对路径。
@isdir - 如果文件类型是目录,返回 "TRUE";如果是文件,返回 "FALSE"。
@fsize - 以字节为单位返回文件大小。
@fdate - 返回文件上一次修改的日期。
@ftime - 返回文件上一次修改的时间。
默认命令是 "cmd /c echo @file"。下列变量
可以用在命令字符串中:
@file - 返回文件名。
@fname - 返回不带扩展名的文件名。
@ext - 只返回文件的扩展。
@path - 返回文件的完整路径。
@relpath - 返回文件的相对路径。
@isdir - 如果文件类型是目录,返回 "TRUE";如果是文件,返回 "FALSE"。
@fsize - 以字节为单位返回文件大小。
@fdate - 返回文件上一次修改的日期。
@ftime - 返回文件上一次修改的时间。
#16
我把WIN7(32位)里的forfiles,放到XP(32位)里的system32里,双击批处理提示不是有效的WIN32应用程序哦。
#17
搞后了,拿win2003的forfiles即可。
#18
可不可以再这段程序的基础上加一个判断条件,但该分区的剩余容量小于10G时,才执行以下命令:
set SrcDir=E:\software
set DaysAgo=7
forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c del /f /q /a @path"
你懂吗?
#19
@echo off
set vol=E
for /f "tokens=2* delims=:" %%a in ('fsutil volume diskfree %vol%:') do set free=%%a
set free=%free:~0,-6%
echo %free%
if %free% lss 10000 echo 这个逻辑盘空间不足10G
set vol=E
for /f "tokens=2* delims=:" %%a in ('fsutil volume diskfree %vol%:') do set free=%%a
set free=%free:~0,-6%
echo %free%
if %free% lss 10000 echo 这个逻辑盘空间不足10G
#20
可以解释下吗?感激不尽。
#21
我网上查了一些资料,明白了一些。不过还有几点不明白
1."tokens=2* delims=:"这个分割的地方我看不懂,2*是不是指E区的所有空间?:呢?
2.%free:~0,-6%这句语法应该怎么理解?网上都找不到相关解释。谢谢。