标题: [已解决]关于变量字符截取
[打印本页]
作者: shrek
时间: 2010-12-7 10:50
标题: [已解决]关于变量字符截取
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=- " %%a in ('date /t') do set nowdate=%%a%%b%%c
for /f %%a in ('dir d:\adupdate /a:d /b /o:d^|findstr "^*$"') do (
set lodpatch=%%a
if %lodpatch:~0,8% neq %nowdate% (del d:\adupdate\%%a)
)
我想删除早于当天生成的文件夹。因为文件夹会有其他后缀,所以想截取前8位做比较。求在for循环中引用当前变量的方法。%lodpatch:~0,8% 为什么不起作用呢?
谢谢
Last edited by shrek on 2010-12-8 at 20:42 ]
作者: Hanyeguxing
时间: 2010-12-7 11:24
1,因为下面没有!!括的变量,所以setlocal enabledelayedexpansion没有必要
2,相对于'date /t',推荐直接使用"%date%"
3,因为楼主使用了%lodpatch:~0,8%,那么说明文件夹名必须前8位型如20101207,如果型如2010127这样就会出错。
4,因为在第二个for中没指定分隔符,所以文件夹名中不能有空格!
5,findstr "^*$,这里的*是重复的意思,通配为.,所以按照这个命令过滤出的文件夹名只能由0-9和_11个字符构成,其他的都会被排除。
但楼主说“因为文件夹会有其他后缀”那么就是文件夹名中还有.或其他字符等,那么几乎就不会有文件夹剩下来了。楼主可以用这个代码测试就知道了:
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=- " %%a in ('date /t') do set nowdate=%%a%%b%%c
for /f %%a in ('dir d:\adupdate /a:d /b /o:d^|findstr "^*$"') do (
echo 测试%%a
)
pause
看显示几个文件夹
作者: shrek
时间: 2010-12-7 11:34
谢谢回答,已经解决了,文件夹都是20101206,20101206_1,20101206_2类是的文件。
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=- " %%a in ('date /t') do set nowdate=%%a%%b%%c
for /f %%a in ('dir d:\adupdate /a:d /b /o:d^|findstr "^[0-9_]*$"') do (
set lodpatch=%%a
if !lodpatch:~0,8! neq %nowdate% (del d:\adupdate\%%a)
)
把%换成!就实现了需要的功能。
怎么理解变量时使用%,!,还有set "a=!a:~0,8!" 这里的双引号怎么理解。
作者: shrek
时间: 2010-12-7 11:42
为什么没用%date%呢?
在不同的系统显示出来的顺序不一样,所以我使用了date /t
xp和2003这么显示: 2010-12-07 星期二
2000 却这么显示: 星期二 2010-12-07
我这个要在不同的系统使用 :)
作者: HAT
时间: 2010-12-7 22:58