[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
求楼主帮忙啊,这篇贴太棒了,对我太有用了,但是我在NT系统里面试了一下运行不成功,经过仔细排查后,我发现是
  1. for /r "%SrcDir%" %%a in (*.*) do (
  2.     if "%%~ta" leq "%DstDate%" (
  3.         if exist "%%a" (
  4.             echo del /f /q "%%a"
  5.         )
  6.     )
  7. )
复制代码
这句有问题,在NT系统的for命令下面没有"%%~ta"取时间的命令,因此我另寻他法
  1. for /f "skip=3 tokens=1,3,*" %%a in ('dir %SrcDir%\*.* /tw /od') do (
  2.     if %%a leq %DstDate% (
  3.            del /f /q "%SrcDir%\%%c"
  4.     )
  5. )
复制代码
在XP系统下面运行正常,但是到NT系统下面就不能正常运行,也找不到原因,请大家给帮忙找找原因,谢谢~~~~~

TOP

回复 62# 喃喃努努

建议你从 dir 的输出格式 和 nt 下日期的输出格式(dir) 和 DstDate 的格式是否一致来排查

TOP

回复  喃喃努努

建议你从 dir 的输出格式 和 nt 下日期的输出格式(dir) 和 DstDate 的格式是否一致来排 ...
fatcat 发表于 2012-8-30 10:57



    谢谢,我去看一下。

TOP

回复  喃喃努努

建议你从 dir 的输出格式 和 nt 下日期的输出格式(dir) 和 DstDate 的格式是否一致来排 ...
fatcat 发表于 2012-8-30 10:57



    确实日期格式有问题,我应该如何改呢?NT系统下面dir 输出文件的日期格式为mm/dd/yy,而DstDate为yyyy-mm-dd.

TOP

回复 65# 喃喃努努
  1. set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
复制代码
修改这一句

TOP

回复  喃喃努努 修改这一句
forfiles 发表于 2012-8-30 15:58


谢谢了,但是还有问题,
  1. echo  %DstDate%
  2. pause
  3. for /f "skip=3 tokens=1,3,*" %%a in ('dir %SrcDir%\*.* /tw /od') do (
  4.           echo del /f /q %%a  %SrcDir%\%%c
  5. )
  6. pause
  7. for /f "skip=3 tokens=1,3,*" %%a in ('dir %SrcDir%\*.* /tw /od') do (
  8.     if "%%a" leq "%DstDate%" (
  9.           echo del /f /q %SrcDir%\%%c
  10.     )
  11. )
  12. pause
复制代码
运行前两步都行,但是第三步还是不行,貌似还是不能比较的情况, if "%%a" leq "%DstDate%"这个里面变量加引号和不加引号都不行。

TOP

回复 67# 喃喃努努


    这样直接比较确实有问题。你试试顶楼的reg add命令修改注册表之后,看看dir命令的显示结果能否改成yyyy-mm-dd

TOP

回复 68# forfiles


不行啊,reg好像在NT系统里面用不了。只能找其他出路了。

TOP

回复 68# forfiles


这个是NT的注册表里面的,好像时间格式和我们需要的yyyy-M-d一样,但是用dir显示出来的为什么还是m/d/yy,搞不懂。

TOP

回复 68# forfiles


    突然发现可以NT系统可以if判断比较,也可以for循环,但是两个不能嵌套,嵌套在一起的话不运行直接跳过,也不报错,不知道什么情况。

TOP

回复 71# 喃喃努努


把你的完整代码贴出来我看看
还有就是把@echo off删掉执行一遍把过程贴出来

TOP

回复 72# forfiles
  1. set SrcDir=D:\temp1
  2. set DaysAgo=1
  3. >"%temp%\BackupDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  4. >>"%temp%\BackupDate.vbs" echo WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER\Control
  5. Panel\International\sShortDate")
  6. for /f %%a in ('cscript /nologo "%temp%\BackupDate.vbs"') do (
  7.     set "RegDateOld=%%a"
  8. )
  9. pause
  10. >"%temp%\UnifyDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  11. >>"%temp%\UnifyDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control
  12. Panel\International\sShortDate", "yyyy-M-d", "REG_SZ"
  13. cscript /nologo "%temp%\UnifyDate.vbs"
  14. >"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
  15. >>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^&
  16. 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. pause
  23. dir %SrcDir%\*.* /tw /od /tw
  24. pause
  25. for /f "skip=3 tokens=1,3,*" %%a in ('dir %SrcDir%\*.* /tw /od') do (echo %%a %%c)
  26. pause
  27. if "1" LEQ "2" echo  del /f /q 123
  28. if "3" LEQ "2" echo  del /f /q 456
  29. pause
  30. for /f "skip=3 tokens=1,3,*" %%a in ('dir %SrcDir%\*.* /tw /od') do (
  31.     if "1" LEQ "2" (
  32.           echo  %%a %%c
  33.     )
  34. )
  35. pause
  36. >"%temp%\RecoverDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  37. >>"%temp%\RecoverDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control
  38. Panel\International\sShortDate", "%RegDateOld%", "REG_SZ"
  39. cscript /nologo "%temp%\RecoverDate.vbs"
  40. pause
复制代码

TOP

回复 72# forfiles


D:\WINNT\Profiles\ASEKS\Desktop>set SrcDir=D:\temp1

D:\WINNT\Profiles\ASEKS\Desktop>set DaysAgo=1

D:\WINNT\Profiles\ASEKS\Desktop>echo Set WshShell = WScript.CreateObject("WScript.Shell"
) 1>"D:\TEMP\BackupDate.vbs"

D:\WINNT\Profiles\ASEKS\Desktop>echo WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER\C
ontrol Panel\International\sShortDate") 1>>"D:\TEMP\BackupDate.vbs"

D:\WINNT\Profiles\ASEKS\Desktop>FOR /F %a in ('cscript /nologo "D:\TEMP\BackupDate.vbs"'
) do (set "RegDateOld=%a" )

D:\WINNT\Profiles\ASEKS\Desktop>(set "RegDateOld=yyyy-M-d" )

D:\WINNT\Profiles\ASEKS\Desktop>pause
Press any key to continue . . .

D:\WINNT\Profiles\ASEKS\Desktop>echo Set WshShell = WScript.CreateObject("WScript.Shell"
) 1>"D:\TEMP\UnifyDate.vbs"

D:\WINNT\Profiles\ASEKS\Desktop>echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\
International\sShortDate", "yyyy-M-d", "REG_SZ" 1>>"D:\TEMP\UnifyDate.vbs"

D:\WINNT\Profiles\ASEKS\Desktop>cscript /nologo "D:\TEMP\UnifyDate.vbs"

D:\WINNT\Profiles\ASEKS\Desktop>echo LastDate=date()-1 1>"D:\TEMP\DstDate.vbs"

D:\WINNT\Profiles\ASEKS\Desktop>echo FmtDate=right(year(LastDate),4) & right("0" & month
(LastDate),2) & right("0" & day(LastDate),2) 1>>"D:\TEMP\DstDate.vbs"

D:\WINNT\Profiles\ASEKS\Desktop>echo wscript.echo FmtDate 1>>"D:\TEMP\DstDate.vbs"

D:\WINNT\Profiles\ASEKS\Desktop>FOR /F %a in ('cscript /nologo "D:\TEMP\DstDate.vbs"') d
o (set "DstDate=%a" )

D:\WINNT\Profiles\ASEKS\Desktop>(set "DstDate=20120902" )

D:\WINNT\Profiles\ASEKS\Desktop>set DstDate=2012-09-02

D:\WINNT\Profiles\ASEKS\Desktop>pause
Press any key to continue . . .
D:\WINNT\Profiles\ASEKS\Desktop>dir D:\temp1\*.* /tw /od /tw
Volume in drive D is WINNT
Volume Serial Number is 642B-B607

Directory of D:\temp1

08/28/12  04:24p                32,700 fldb1897
08/29/12  03:40p                32,704 fldb1898
08/31/12  02:42a                54,117 fldb1913
09/01/12  01:26a                54,121 fldb1916
09/03/12  01:26p                     0 TEST.txt
09/03/12  01:26p        <DIR>          ..
09/03/12  01:26p        <DIR>          .
               7 File(s)        173,642 bytes
                          1,073,503,744 bytes free

D:\WINNT\Profiles\ASEKS\Desktop>pause
Press any key to continue . . .

D:\WINNT\Profiles\ASEKS\Desktop>FOR /F "skip=3 tokens=1,3,*" %a in ('dir D:\temp1\*.* /t
w /od') do (echo %a %c )

D:\WINNT\Profiles\ASEKS\Desktop>(echo Directory  )
Directory

D:\WINNT\Profiles\ASEKS\Desktop>(echo 08/28/12 fldb1897 )
08/28/12 fldb1897

D:\WINNT\Profiles\ASEKS\Desktop>(echo 08/29/12 fldb1898 )
08/29/12 fldb1898

D:\WINNT\Profiles\ASEKS\Desktop>(echo 08/31/12 fldb1913 )
08/31/12 fldb1913

D:\WINNT\Profiles\ASEKS\Desktop>(echo 09/01/12 fldb1916 )
09/01/12 fldb1916

D:\WINNT\Profiles\ASEKS\Desktop>(echo 09/03/12 TEST.txt )
09/03/12 TEST.txt

D:\WINNT\Profiles\ASEKS\Desktop>(echo 09/03/12 .. )
09/03/12 ..

D:\WINNT\Profiles\ASEKS\Desktop>(echo 09/03/12 . )
09/03/12 .

D:\WINNT\Profiles\ASEKS\Desktop>(echo 7 bytes )
7 bytes

D:\WINNT\Profiles\ASEKS\Desktop>(echo 1,073,503,744  )
1,073,503,744

D:\WINNT\Profiles\ASEKS\Desktop>pause
Press any key to continue . . .

D:\WINNT\Profiles\ASEKS\Desktop>if "1" LEQ "2" echo  del /f /q 123
del /f /q 123

D:\WINNT\Profiles\ASEKS\Desktop>if "3" LEQ "2" echo  del /f /q 456

D:\WINNT\Profiles\ASEKS\Desktop>pause
Press any key to continue . . .

D:\WINNT\Profiles\ASEKS\Desktop>FOR /F "skip=3 tokens=1,3,*" %a in ('dir D:\temp1\*.* /t
w /od') do (if "1" LEQ "2" (echo  %a %c ) )

D:\WINNT\Profiles\ASEKS\Desktop>pause
Press any key to continue . . .

D:\WINNT\Profiles\ASEKS\Desktop>echo Set WshShell = WScript.CreateObject("WScript.Shell"
) 1>"D:\TEMP\RecoverDate.vbs"

D:\WINNT\Profiles\ASEKS\Desktop>echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\
International\sShortDate", "yyyy-M-d", "REG_SZ" 1>>"D:\TEMP\RecoverDate.vbs"

D:\WINNT\Profiles\ASEKS\Desktop>cscript /nologo "D:\TEMP\RecoverDate.vbs"

D:\WINNT\Profiles\ASEKS\Desktop>pause
Press any key to continue . . .

TOP

回复 72# forfiles


    我这里没有做实际的时间比较,因为时间格式还没有统一,所以你先帮我看看为什么for和if嵌套不行,也没报错,只是没有运行结果;for单独运行可以,if单独运行也可以,就是for和if 嵌套没有运行结果。

TOP

回复 75# 喃喃努努


我在Win7里面测试了一下没有问题:
  1. set SrcDir=D:\temp1
  2. for /f "skip=3 tokens=1,3,*" %%a in ('dir %SrcDir%\*.* /tw /od') do (
  3.     if "1" LEQ "2" (
  4.         echo right %%a %%c
  5.     ) else (
  6.         echo wrong %%a %%c
  7.     )
  8. )
  9. pause
复制代码

TOP

返回列表