Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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
Windows 批处理-在ECHO和IF处提供不同输出的变量_Windows_Batch File_Variables_Echo - Fatal编程技术网

Windows 批处理-在ECHO和IF处提供不同输出的变量

Windows 批处理-在ECHO和IF处提供不同输出的变量,windows,batch-file,variables,echo,Windows,Batch File,Variables,Echo,我目前正在批量实现一个后处理,在做了一些更改之后,一些代码片段就不再工作了 我想做的是: @echo off & setlocal ECHO %netUse% //For debugging! IF NOT "%netUse%" == "" ( //Double checking if Variable is set IF %netUse% EQU 1 ( IF %netUsePW% EQU 1

我目前正在批量实现一个后处理,在做了一些更改之后,一些代码片段就不再工作了

我想做的是:

@echo off & setlocal
ECHO %netUse%                        //For debugging!
IF NOT "%netUse%" == "" (            //Double checking if Variable is set
    IF %netUse% EQU 1 (
        IF %netUsePW% EQU 1 (
            NET USE %netUseLetter% %netPath% %pw% /user:%netUser% 
        )
        IF %netUsePW% EQU 0 (
            NET USE %netUseLetter% %netPath%
        )
    )
)
当我运行该代码时,这是输出:

C:\Program Files (x86)\ID GmbH\PRODETTE\DAX\ISDN>ECHO 0
0   <--- That's right! It is set to ZERO via a "configuration" Batch
"1" kann syntaktisch an dieser Stelle nicht verarbeitet werden.   <-- ???

C:\Program Files (x86)\ID GmbH\PRODETTE\DAX\ISDN>               IF  EQU 1 (  <-- Why isn't it comparing the variable?
(因为netUse是0,所以我不需要填充其他变量……对吗?)

TL:DR:Batch不起作用,但我不知道为什么

IF NOT "%netUse%" == "" (            //Double checking if Variable is set
    IF %netUse% EQU 1 (
        IF %netUsePW% EQU 1 (
测试“netuse”然后抱怨“netusePW”未设置没有意义


测试“netuse”然后抱怨“netusePW”未设置没有意义。

问题是变量
netusePW
未设置

netUse
设置为
0
,且
netUsePW
netusedletter
netUsePath
pw
均为空时,您的代码…:

@echo off&setlocal
回显%netUse%
如果不是“%netUse%”,则为(
如果%NET使用%EQU 1(
如果%netUsePW%EQU 1(
净使用率%netUseLetter%%netPath%%pw%/用户:%netUser%
)
如果%netUsePW%eq 0(
净使用率%netUseLetter%%netPath%
)
)
)
…扩展到…:

@echo off&setlocal
回声0
如果不是“0”=“”(
如果0等于1(
如果等于1(
净使用/用户:0
)
如果等于0(
净使用
)
)
)
如您所见,有两个语法问题会导致错误:

如果等于1
如果等于0
尽管
netUse
设置为
0
,因此如果%netUse%eq 1不执行
之后的语句,它们仍然会被解析,因为在执行任何命令之前都会解析整个代码块


要克服这一问题,有几种方法:

  • 具有非空值的预设变量:

    @echo off&setlocal
    回显%netUse%
    如果“%netUse%”==”(设置“netUse=-1”并设置“setUsePW=-1”)
    如果不是“%netUse%”,则为(
    如果%NET使用%EQU 1(
    如果%netUsePW%EQU 1(
    净使用率%netUseLetter%%netPath%%pw%/用户:%netUser%
    )
    如果%netUsePW%eq 0(
    净使用率%netUseLetter%%netPath%
    )
    )
    )
    
  • 通过稍微更改逻辑并使用
    goto
    避免代码块:

    @echo off&setlocal
    回显%netUse%
    如果“%netUse%”==“转到:跳过
    如果%netUse%NEQ 1转到:跳过
    如果%netUsePW%EQU 1(
    净使用率%netUseLetter%%netPath%%pw%/用户:%netUser%
    )
    如果%netUsePW%eq 0(
    净使用率%netUseLetter%%netPath%
    )
    :跳过
    
  • 通过将一些代码移动到子例程中并使用
    call
    调用它们来避免代码块:

    @echo off&setlocal
    回显%netUse%
    如果不是“%netUse%”==“调用:测试“%netUse%”“%netUsePW%”“%netuseretter%”“%netPath%”“%pw%”
    退出/B
    :测试
    如果%1 EQU 1调用:TESTPW“%~1”“%~2”“%~3”“%~4”“%~5”
    退出/B
    :TESTPW
    如果%2等于1(
    净使用量%~3%~4%~5/用户:%~1
    )
    如果%2等于0(
    净使用量%%3%~4
    )
    退出/B
    
  • 启用并应用以在执行期间而不是在分析期间执行变量扩展:

    @echo off&setlocal EnableDelayedExpansion
    回显%netUse%
    如果不是“%netUse%”,则为(
    IF!netUse!EQU 1(
    IF!netUsePW!eq 1(
    净使用%netUseLetter%%netPath%%pw%/用户:!netUser!
    )
    IF!netUsePW!eq 0(
    净使用率%netUseLetter%%netPath%
    )
    )
    )
    

  • 问题在于未设置变量
    netUsePW

    netUse
    设置为
    0
    ,且
    netUsePW
    netusedletter
    netUsePath
    pw
    均为空时,您的代码…:

    @echo off&setlocal
    回显%netUse%
    如果不是“%netUse%”,则为(
    如果%NET使用%EQU 1(
    如果%netUsePW%EQU 1(
    净使用率%netUseLetter%%netPath%%pw%/用户:%netUser%
    )
    如果%netUsePW%eq 0(
    净使用率%netUseLetter%%netPath%
    )
    )
    )
    
    …扩展到…:

    @echo off&setlocal
    回声0
    如果不是“0”=“”(
    如果0等于1(
    如果等于1(
    净使用/用户:0
    )
    如果等于0(
    净使用
    )
    )
    )
    
    如您所见,有两个语法问题会导致错误:

    如果等于1
    如果等于0
    
    尽管
    netUse
    设置为
    0
    ,因此如果%netUse%eq 1
    不执行
    之后的语句,它们仍然会被解析,因为在执行任何命令之前都会解析整个代码块


    要克服这一问题,有几种方法:

  • 具有非空值的预设变量:

    @echo off&setlocal
    回显%netUse%
    如果“%netUse%”==”(设置“netUse=-1”并设置“setUsePW=-1”)
    如果不是“%netUse%”,则为(
    如果%NET使用%EQU 1(
    如果%netUsePW%EQU 1(
    净使用率%netUseLetter%%netPath%%pw%/用户:%netUser%
    )
    如果%netUsePW%eq 0(
    净使用率%netUseLetter%%netPath%
    )
    )
    )
    
  • 通过稍微更改逻辑并使用
    goto
    避免代码块:

    @echo off&setlocal
    回显%netUse%
    如果“%netUse%”==“转到:跳过
    如果%netUse%NEQ 1转到:跳过
    如果%netUsePW%EQU 1(
    净使用率%netUseLetter%%netPath%%pw%/用户:%netUser%
    )
    如果%netUsePW%eq 0(
    净使用率%netUseLetter%%netPath%
    )
    :跳过
    
  • 通过将一些代码移动到子例程中并使用
    call
    调用它们来避免代码块:

    @echo off&setlocal
    回显%netUse%
    如果不是“%netUse%”==“调用:测试“%netUse%”“%netUsePW%”“%netuseretter%”“%netPath%”“%pw%”
    退出/B
    :测试
    如果%1 EQU 1调用:TESTPW“%~1”“%~2”“%~3”“%~4”“%~5”
    退出/B
    :TESTPW
    如果%2等于1(
    净使用量%~3%~4%~5/用户:%~1
    )
    如果%2等于0(
    净使用量%%3%~4
    )
    退出/B
    
  • 启用并应用以在执行期间而不是在分析期间执行变量扩展:

    @echo off&setlocal EnableDelayedExpansion
    回显%netUse%
    如果不是“%netUse%”,则为(
    IF!netUse!EQU 1(
    
    IF NOT "%netUse%" == "" (            //Double checking if Variable is set
        IF %netUse% EQU 1 (
            IF %netUsePW% EQU 1 (