[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
set "FileDate=%%~na"
set "FileDate=!FileDate:~4,10!"

改成:
set "FileDate=%%~nxa"
set "FileDate=!FileDate:~-17,10!"

TOP

回复 5# zbgxg


    打开CMD窗口,切换到你的文件所在的目录,执行命令 dir /b 把结果发出来我看一下。

TOP

回复 7# zbgxg


set "FileDate=%%~nxa"
set "FileDate=!FileDate:~-21,10!"

TOP

回复 9# zbgxg
  1. set SrcDir=H:/Test1
  2. rem 指定天数
  3. set DaysAgo=5
  4. >"%temp%/DstDate.vbs" echo LastDate=date()-%DaysAgo%
  5. >>"%temp%/DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
  6. >>"%temp%/DstDate.vbs" echo wscript.echo FmtDate
  7. for /f %%a in ('cscript /nologo "%temp%/DstDate.vbs"') do (
  8.   set "DstDate=%%a"
  9. )
  10. set DstDate=%DstDate:~0,4% ^& %DstDate:~4,2% ^& %DstDate:~6,2%
  11. setlocal enabledelayedexpansion
  12. for /r "%SrcDir%" %%a in (*.*) do (
  13.     echo [1] !FileDate!
  14.     set "FileDate=%%~nxa"
  15.     echo [2] !FileDate!
  16.     set "FileDate=!FileDate:~-21,10!"
  17.     echo [3] %DstDate%
  18.     if "!FileDate!" leq "%DstDate%" (
  19.         if exist "%%a" (
  20.             echo del /f /q "%%a"
  21.         )
  22.     )
  23. )
  24. endlocal
  25. pause
复制代码
把这个代码的执行结果发出来看看,这样能知道为什么出错。

TOP

回复 11# zbgxg


你现在知道问题出在什么地方了吧?
2017-02-13 221047 这种日期时间字符串在你的文件名里面的出现的位置不一定,没有任何规律,导致 set 命令截取不到正确的字符串。

顶楼这个代码的思路是要求文件名有规律。要么从左往右第几个字符是日期,要么从右往左第几个字符是日期。

TOP

回复 13# zbgxg


    BAT的正则表达式功能不完善,可以调用第三方命令行工具,或者改用其它脚本。

TOP

回复 15# yu2n


    又看了一遍 findstr 的正则,没有发现它能解决楼主的问题,能否把你的代码放出来学习一下?

TOP

回复 17# yu2n


你可能没有理解楼主的需求,他的文件名里面都有日期,不需要用findstr查找。
他这个问题的难点在于日期字符串在文件名里面的位置不固定,findstr的正则不足以解决这个难点。

TOP

回复 19# yu2n


abc0116-0205.xls 2017-02-13 221047
或者
ef0123609-0123315.xls 2017-02-13 083946
就是文件的名字前部分长度什么的没有规律,后部分都 2017-02-13 083946 这样,年-月-日 时分秒

我是这样理解的,他顶楼说的是2个文件而不是4个文件。

TOP

回复 21# zbgxg


    但是你15楼给的测试用例不是以xxxx-xx-xx xxxxxx 作为文件名的结尾,“副本”神马的怎么也出来了?

TOP

返回列表