中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-23 12:12
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]关于变量字符截取 查看 778 回复 4
楼 主 [已解决]关于变量字符截取 发表于 2010-12-07 10:50 ·  中国 北京 鹏博士BGP
新手上路
积分 3
发帖 3
注册 2010-08-03 20:24
15年会员
UID 171696
性别 男
状态 离线
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 ]
2 发表于 2010-12-07 11:24 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
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

看显示几个文件夹
3 发表于 2010-12-07 11:34 ·  中国 北京 鹏博士BGP
新手上路
积分 3
发帖 3
注册 2010-08-03 20:24
15年会员
UID 171696
性别 男
状态 离线
谢谢回答,已经解决了,文件夹都是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!" 这里的双引号怎么理解。
4 发表于 2010-12-07 11:42 ·  中国 北京 鹏博士BGP
新手上路
积分 3
发帖 3
注册 2010-08-03 20:24
15年会员
UID 171696
性别 男
状态 离线
为什么没用%date%呢?
在不同的系统显示出来的顺序不一样,所以我使用了date /t
xp和2003这么显示: 2010-12-07 星期二
2000 却这么显示: 星期二 2010-12-07
我这个要在不同的系统使用 :)
5 发表于 2010-12-07 22:58 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
批处理标准化获取当前系统日期
http://bbs.bathome.net/thread-3328-1-1.html
论坛跳转: