Board logo

标题: [文件操作] [已解决]批处理怎么删除多个文件夹内的文件? [打印本页]

作者: xminghk    时间: 2015-5-24 11:23     标题: [已解决]批处理怎么删除多个文件夹内的文件?

本帖最后由 xminghk 于 2015-5-25 12:03 编辑

这个批处理是删除指定天数日期之前的文件,但是只有批定一个文件夹,我有其他的几个文件夹也是同样要删除之前的文件,但是不知要怎么处理,哪位帮忙一下,先谢谢了,
  1. @echo off
  2. rem 还有其他文件夹内的文件要删除要怎么设呢?如:D:\LastPass\ F:\Temp\ 等等
  3. rem 用SrcDir1=:D:\LastPass\ SrcDir2=F:\Temp\ 试了好象也不行 只能一个个来就正常了
  4. set SrcDir=I:\Windows\TOP_2014\
  5. rem 指定天数
  6. set DaysAgo=6
  7. >"%temp%\BackupDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  8. >>"%temp%\BackupDate.vbs" echo WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER\Control Panel\International\sShortDate")
  9. for /f %%a in ('cscript /nologo "%temp%\BackupDate.vbs"') do (
  10. set "RegDateOld=%%a"
  11. )
  12. >"%temp%\UnifyDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  13. >>"%temp%\UnifyDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "yyyy-M-d", "REG_SZ"
  14. cscript /nologo "%temp%\UnifyDate.vbs"
  15. >"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
  16. >>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
  17. >>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
  18. for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
  19. set "DstDate=%%a"
  20. )
  21. set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
  22. for /r "%SrcDir%" %%a in (*.*) do (
  23. if "%%~ta" leq "%DstDate%" (
  24. if exist "%%a" (
  25. del /f /q "%%a"
  26. )
  27. )
  28. )
  29. >"%temp%\RecoverDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  30. >>"%temp%\RecoverDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "%RegDateOld%", "REG_SZ"
  31. cscript /nologo "%temp%\RecoverDate.vbs"
复制代码

作者: terse    时间: 2015-5-24 14:53

本帖最后由 terse 于 2015-5-24 18:36 编辑
这个批处理是删除指定天数日期之前的文件,但是只有批定一个文件夹,我有其他的几个文件夹也是同样要删除之 ...
xminghk 发表于 2015-5-24 11:23

将代码
  1. for /r "%SrcDir%" %%a in (*.*) do (
  2. if "%%~ta" leq "%DstDate%" (
  3. if exist "%%a" (
  4. del /f /q "%%a"
  5. )
  6. )
  7. )
复制代码
改为下面试
注意 备份原文件
  1. set filepath="D:\LastPass\" "F:\Temp\"
  2. for %%f in (%filepath%) do (
  3.     for /f "delims=" %%a in ('dir /s/b/a-d %%f') do (
  4.         if "%%~ta" leq "%DstDate%"  del /f /q "%%a"
  5.     )
  6. )
复制代码

作者: xminghk    时间: 2015-5-24 15:11

试了还是不行,连文件都不能删除,我上面的那个是可以删除,但是只有删除一个文件夹内的文件,变成如果要删除多个文件夹要多做几个批处理,只能删单独一个文件夹内的文件(set SrcDir=I:\Windows\TOP_2014\)才行,不过还是谢谢你的,谢谢你了。
作者: terse    时间: 2015-5-24 16:50

试了还是不行,连文件都不能删除,我上面的那个是可以删除,但是只有删除一个文件夹内的文件,变成如果要删 ...
xminghk 发表于 2015-5-24 15:11

del /f /q "%%a" 换  Echo  "%%a" 看什么结果
作者: xminghk    时间: 2015-5-24 17:07

还是不行啊,老师,是不是改成下面这样?试了还是不行的,

@echo off
rem 指定待删除文件的存放路径 系统日期改格式yyyy-mm-dd
set SrcDir=I:\Windows\ESWeb\
set SrcDir1=I:\Windows\KIS_2014\
set SrcDir2=I:\Windows\TOP_2014\
set SrcDir3=I:\Windows\TOP_2015\
rem 指定天数
set DaysAgo=4
>"%temp%\BackupDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\BackupDate.vbs" echo WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER\Control Panel\International\sShortDate")
for /f %%a in ('cscript /nologo "%temp%\BackupDate.vbs"') do (
    set "RegDateOld=%%a"
)
>"%temp%\UnifyDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\UnifyDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "yyyy-M-d", "REG_SZ"
cscript /nologo "%temp%\UnifyDate.vbs"
>"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
    set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
set filepath="I:\Windows\ESWeb\" "I:\Windows\KIS_2014\" "I:\Windows\TOP_2014\" "I:\Windows\TOP_2015\"
for %%f in (filepath) do (
    for /f "delims=" %%a in ('dir /s/b/a-d %%f') do (
        if "%%~ta" leq "%DstDate%"  Echo  "%%a"
    )
)
>"%temp%\RecoverDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\RecoverDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "%RegDateOld%", "REG_SZ"
cscript /nologo "%temp%\RecoverDate.vbs"
作者: terse    时间: 2015-5-24 18:35

还是不行啊,老师,是不是改成下面这样?试了还是不行的,

@echo off
rem 指定待删除文件的存放路径 系 ...
xminghk 发表于 2015-5-24 17:07

漏写了
  1. for %%f in (%filepath%) do
复制代码

作者: terse    时间: 2015-5-24 18:36

还是不行啊,老师,是不是改成下面这样?试了还是不行的,

@echo off
rem 指定待删除文件的存放路径 系 ...
xminghk 发表于 2015-5-24 17:07


2楼已改正
作者: xminghk    时间: 2015-5-24 23:23

谢谢你了老师,好了。
作者: pcl_test    时间: 2015-5-25 00:23

回复 8# xminghk


    问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html
作者: xminghk    时间: 2015-5-25 11:18

不行,今天测试了一下还是没解决的,没有删除文件,只有我在一楼说的那种才行,我那种只有删除一个文件夹内的文件,不能删除其他路径文件夹内的文件,昨天以为terse老师的可以,是因为运行的时候没有出现错误,以为可以了,但后来再测试一下,发现并没有删除文件。
作者: Batcher    时间: 2015-5-25 11:25

  1. @echo off
  2. rem 指定天数
  3. set DaysAgo=6
  4. >"%temp%\BackupDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  5. >>"%temp%\BackupDate.vbs" echo WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER\Control Panel\International\sShortDate")
  6. for /f %%a in ('cscript /nologo "%temp%\BackupDate.vbs"') do (
  7.     set "RegDateOld=%%a"
  8. )
  9. >"%temp%\UnifyDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  10. >>"%temp%\UnifyDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "yyyy-M-d", "REG_SZ"
  11. cscript /nologo "%temp%\UnifyDate.vbs"
  12. >"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
  13. >>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
  14. >>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
  15. for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
  16.     set "DstDate=%%a"
  17. )
  18. set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
  19. REM 删除多个文件夹内的文件
  20. for %%i in ("D:\LastPass" "F:\Temp" "I:\Windows\TOP_2014") do (
  21.     pushd "%%i"
  22.     for /r %%a in (*.*) do (
  23.         if "%%~ta" leq "%DstDate%" (
  24.             if exist "%%a" (
  25.                 del /f /q "%%a"
  26.             )
  27.         )
  28.     )
  29.     popd
  30. )
  31. >"%temp%\RecoverDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  32. >>"%temp%\RecoverDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "%RegDateOld%", "REG_SZ"
  33. cscript /nologo "%temp%\RecoverDate.vbs"
复制代码

作者: terse    时间: 2015-5-25 11:28

回复 10# xminghk
最终运行的代码发上来
另 去掉最后加上的”ECHO“ 吗
作者: xminghk    时间: 2015-5-25 11:38

@echo off
rem 指定待删除文件的存放路径 系统日期改格式yyyy-mm-dd
set SrcDir=I:\Windows\ESWeb\
set SrcDir=I:\Windows\KIS_2014\
set SrcDir=I:\Windows\TOP_2014\
set SrcDir=I:\Windows\TOP_2015\
rem 指定天数
set DaysAgo=4
>"%temp%\BackupDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\BackupDate.vbs" echo WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER\Control Panel\International\sShortDate")
for /f %%a in ('cscript /nologo "%temp%\BackupDate.vbs"') do (
    set "RegDateOld=%%a"
)
>"%temp%\UnifyDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\UnifyDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "yyyy-M-d", "REG_SZ"
cscript /nologo "%temp%\UnifyDate.vbs"
>"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
    set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
set filepath="I:\Windows\ESWeb\" "I:\Windows\KIS_2014\" "I:\Windows\TOP_2014\" "I:\Windows\TOP_2015\"
for %%f in (%filepath%) do (
    for /f "delims=" %%a in ('dir /s/b/a-d %%f') do (
        if "%%~ta" leq "%DstDate%" "%%a"
    )
)
>"%temp%\RecoverDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\RecoverDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "%RegDateOld%", "REG_SZ"
cscript /nologo "%temp%\RecoverDate.vbs"
作者: terse    时间: 2015-5-25 11:41

回复 13# xminghk

if "%%~ta" leq "%DstDate%" "%%a"  这里 改 if "%%~ta" leq "%DstDate%" del  /q /f "%%a"
作者: xminghk    时间: 2015-5-25 11:46     标题: [已解决]批处理怎么删除多个文件夹内的文件?

本帖最后由 xminghk 于 2015-5-25 11:56 编辑

可以了,成功了,11楼的Batcher老师修改后的批处理可以了,terse老师的也测试成立。谢谢,谢谢Batcher老师,谢谢terse老师,谢谢你们的帮助。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2