Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 批处理文件中设置的变量赢得';不显示_Variables_Batch File - Fatal编程技术网

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