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 (