中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [已解决]关于变量字符截取 上一主题 | 下一主题
shrek
新手上路





积分 3
发帖 3
注册 2010-8-3
状态 离线
『楼 主』:  [已解决]关于变量字符截取

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)
)

我想删除早于当天生成的文件夹。因为文件夹会有其他后缀,所以想截取前8位做比较。求在for循环中引用当前变量的方法。%lodpatch:~0,8% 为什么不起作用呢?
谢谢

[ Last edited by shrek on 2010-12-8 at 20:42 ]

2010-12-7 10:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  

1,因为下面没有!!括的变量,所以setlocal enabledelayedexpansion没有必要
2,相对于'date /t',推荐直接使用"%date%"
3,因为楼主使用了%lodpatch:~0,8%,那么说明文件夹名必须前8位型如20101207,如果型如2010127这样就会出错。
4,因为在第二个for中没指定分隔符,所以文件夹名中不能有空格!
5,findstr "^[0-9_]*$,这里的*是重复的意思,通配为.,所以按照这个命令过滤出的文件夹名只能由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 "^[0-9_]*$"') do (
echo 测试%%a
)
pause
看显示几个文件夹



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-12-7 11:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
shrek
新手上路





积分 3
发帖 3
注册 2010-8-3
状态 离线
『第 3 楼』:  

谢谢回答,已经解决了,文件夹都是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!" 这里的双引号怎么理解。

2010-12-7 11:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
shrek
新手上路





积分 3
发帖 3
注册 2010-8-3
状态 离线
『第 4 楼』:  

为什么没用%date%呢?
在不同的系统显示出来的顺序不一样,所以我使用了date /t
xp和2003这么显示: 2010-12-07 星期二
2000 却这么显示: 星期二 2010-12-07
我这个要在不同的系统使用 :)

2010-12-7 11:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  

批处理标准化获取当前系统日期
http://bbs.bathome.net/thread-3328-1-1.html



2010-12-7 22:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: