Variables 批处理文件中设置的变量赢得';不显示
在记事本中执行此操作时,命令提示符不会显示Variables 批处理文件中设置的变量赢得';不显示,variables,batch-file,Variables,Batch File,在记事本中执行此操作时,命令提示符不会显示ping%ip%-t-l%package%,但会显示ping%ip%-t-l,并且不会显示package变量 @echo off set data=0 set package = -600 IF %data% == 0 ( set /a package= %package% + 1600 @echo ping %ip% -t -l %package% ) echo %package% pause 我做错了什么?批处理对SET
ping%ip%-t-l%package%
,但会显示ping%ip%-t-l
,并且不会显示package变量
@echo off
set data=0
set package = -600
IF %data% == 0 (
set /a package= %package% + 1600
@echo ping %ip% -t -l %package%
)
echo %package%
pause
我做错了什么?批处理对
SET
语句中的空格敏感SET FLAG=N
将名为“FLAGSpace”的变量的值设置为“SpaceN”
设置“var=value”
语法确保批处理行上的任何尾随空格不包括在分配给var
的值中
在块语句(一系列带括号的语句)
中,解析整个块,然后执行。在解析块时,块内的任何%var%
都将替换为该变量的值——在执行块之前——这同样适用于。。。DO(块)
因此,在遇到IF
时,将使用%variables%
的值执行IF(somethingelse)
克服此问题的两种常见方法是:1)使用setlocal enabledelayedexpansion
和!瓦尔
代替%var%
以访问var
的更改值,或2)调用子例程以使用更改的值执行进一步处理
因此,请注意使用了CALL ECHO%%var%%
,它显示了var
的更改值
因此:
注意:setlocal
语句通常应放在代码的开头。您发布的代码显然是一个剪报,因为您似乎没有设置ip
空格在集合/a
中是不相关的,但即便如此,去掉它们也会养成一种习惯
Set/a
在循环中使用语法Set/a var=var+1
时,使用run-time
值,而不是var
的parse-time
值,因此Set/a var=var+1
和Set/a var=!瓦尔+1
是等效的,但是set/a var=%var%+1
在解析循环时使用var
的值
由于初始语句将echoong设置为
off
,因此第二个echo
上的前导@
是多余的。尝试删除set命令中等号周围的空格。应使用Setlocal EnableDelayedExpansion
和˙!包裹˙如果“%data%”==“0”(…)命令,则在中的任何位置都不使用%package%
。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set /A data=0
set /A package=-600
IF %data% == 0 (
set /a package=!package!+1600
echo ping %ip% -t -l !package!
)
echo %package%
pause