中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-01 19:05
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行
DOS批处理 & 脚本技术(批处理室) » for 语句中获取当前路径?
可打印版本  1,323 / 5
第1楼 qdcr 发表于 2006-06-27 15:43
初级用户 发帖 32 积分 120
for 语句中获取当前路径?
请教各位:
@echo off
for /f "tokens=1,2 delims=*" %%i in (test.txt) do (
echo %%i*********%CD%
set orig_dir=%CD%
echo orig_dir--------------%orig_dir%
)
pause

test.txt的内容为:
1
2
3

输出结果为:
1*********E:\files
orig_dir--------------
2*********E:\files
orig_dir--------------
3*********E:\files
orig_dir--------------
Press any key to continue . . .

问题:为什么在for()中定义的字符串获取不到当前路径,输出为空?
第2楼 namejm 发表于 2006-06-27 16:53
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  对于你这种情况,应该启用变量延迟。修正后的代码如下:

第3楼 不得不爱 发表于 2006-06-28 09:54
超级版主 发帖 2,044 积分 5,310 来自 四川南充
是"tokens=1,2 delims=*" 在作怪,删除掉就正常了!如下:
@echo off
for /f %%i in (test.txt) do (
echo %%i*********%CD%
set orig_dir=%CD%
echo orig_dir--------------%orig_dir%
)
pause
第4楼 namejm 发表于 2006-06-28 10:21
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  两种办法都得到了同样的结果,有点奇怪。
  虽然用tokens=1,2 delimes=*有点莫名其妙,但是启用变量延迟之后就正常了,而qwe1234567删了那一句之后不用变量延迟也可以,看来得再向各位请教一下变量延迟的用法了。
第5楼 qdcr 发表于 2006-06-28 12:47
初级用户 发帖 32 积分 120
谢谢,这个 setlocal enabledelayedexpansion 是在任意一个版本的dos中都支持么?
或者 windows 98/2K/xp中的command中都支持么?
第6楼 3742668 发表于 2006-06-28 13:18
荣誉版主 发帖 718 积分 2,013

是"tokens=1,2 delims=*" 在作怪,删除掉就正常了!如下:
@echo off
for /f %%i in (test.txt) do (
echo %%i*********%CD%
set orig_dir=%CD%
echo orig_dir--------------%orig_dir%
)
pause

XP PRO SP2下测试失败。
如果不想起用延时的环境变量的话,建议用call :标号 参数 结构,而且可以让代码的可读性更好。

请自行测试,修改。
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023