标题: for 语句中获取当前路径?
[打印本页]
作者: qdcr
时间: 2006-6-27 15:43
标题: 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()中定义的字符串获取不到当前路径,输出为空?
作者: namejm
时间: 2006-6-27 16:53
对于你这种情况,应该启用变量延迟。修正后的代码如下:
@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
作者: 不得不爱
时间: 2006-6-28 09:54
是"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
作者: namejm
时间: 2006-6-28 10:21
两种办法都得到了同样的结果,有点奇怪。
虽然用tokens=1,2 delimes=*有点莫名其妙,但是启用变量延迟之后就正常了,而qwe1234567删了那一句之后不用变量延迟也可以,看来得再向各位请教一下变量延迟的用法了。
作者: qdcr
时间: 2006-6-28 12:47
谢谢,这个 setlocal enabledelayedexpansion 是在任意一个版本的dos中都支持么?
或者 windows 98/2K/xp中的command中都支持么?
作者: 3742668
时间: 2006-6-28 13:18
Quote: |
是"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
请自行测试,修改。