DOS/for中循环变量向其他变量赋值失败,何故?

来源:百度知道 编辑:UC知道 时间:2024/05/12 17:41:13
设有文件my.txt,内容为:
sys,svr1,.baidu.com,note1
sys,svr2,.yahoo.com.cn,note2
. . . . . .

想用DOS批处理for读出每行各项,并赋值给其他变量,但失败,详见如下:

for /f "usebackq tokens=1,2,3,4 delims=," %%i in ("my.txt") do (

rem 此行正确执行,显示:
echo i=%%i, j=%%j, k=%%k, l=%%l

rem 但下述:循环变量(%%i,%%j)对其他变量(%fullsvrname%,
rem %tmp_i%等)赋值均失败(并无任何错误显示,只是echo变量,
rem 全为空):

set fullsvrname=%%j%%k
set tmp_i=%%i
set tmp_j=%%j

rem 显示"空"
echo fullsvrname=%fullsvrname%
echo tmp_i=%tmp_i%, tmp_j=%tmp_j%
)

为何如此?有什么办法可以实现赋值?

-----
如解答能回复至:zeroflag@msn.com 将十分感谢。

变量没有定义,如下才是正确的。
set /a x=1
set /a y=0;
:loop
set /a y=%x%+%y%
echo %y%
set /a x=%x%+1
if %x% lss 10 goto loop
pause

..........

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-4* delims=," %%i in (my.txt) do (
set fullsvrname=%%j%%k
set tmp_i=%%i
set tmp_j=%%j
echo !fullsvrname!===!tmp_i!===!tmp_j!
pause>nul
)
pause

..........

开启延迟变量就行了,开启延迟变量后%%用!!来表示.
在for命令以内设定的变量,如果又要用在for命令中,它不会识别,属于延迟变量.

如果不开启延迟变量,这么表示也行:
call echo tmp_i=%%tmp_i%%, tmp_j=%%tmp_j%%