中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-01 18:01
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » for 语句中获取当前路径? 查看 1,322 回复 5
楼 主 for 语句中获取当前路径? 发表于 2006-06-27 15:43 ·  中国 北京 联通
初级用户
积分 120
发帖 32
注册 2006-06-19 16:31
20年会员
UID 57256
状态 离线
请教各位:
@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 发表于 2006-06-27 16:53 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  对于你这种情况,应该启用变量延迟。修正后的代码如下:


@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=*" %%i in (test.txt) do (
echo %%i*********%CD%
set orig_dir=%CD%
echo orig_dir--------------!orig_dir!
)
pause
3 发表于 2006-06-28 09:54 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
是"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 发表于 2006-06-28 10:21 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  两种办法都得到了同样的结果,有点奇怪。
  虽然用tokens=1,2 delimes=*有点莫名其妙,但是启用变量延迟之后就正常了,而qwe1234567删了那一句之后不用变量延迟也可以,看来得再向各位请教一下变量延迟的用法了。
5 发表于 2006-06-28 12:47 ·  中国 北京 联通
初级用户
积分 120
发帖 32
注册 2006-06-19 16:31
20年会员
UID 57256
状态 离线
谢谢,这个 setlocal enabledelayedexpansion 是在任意一个版本的dos中都支持么?
或者 windows 98/2K/xp中的command中都支持么?
6 发表于 2006-06-28 13:18 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线

是"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 :标号 参数 结构,而且可以让代码的可读性更好。

@echo off
for /f "tokens=1,2 delims=*" %%i in (test.txt) do call :dosomething %%i
pause
goto :eof

:dosomething
echo %1*********%CD%
set orig_dir=%CD%
echo orig_dir--------------%orig_dir%
goto :eof

请自行测试,修改。
论坛跳转: