Batch file 如果在运行批处理文件时未执行ELSE
如果已经定义了VAR,我想根据以下代码设置VAR2和其他变量:Batch file 如果在运行批处理文件时未执行ELSE,batch-file,if-statement,cmd,Batch File,If Statement,Cmd,如果已经定义了VAR,我想根据以下代码设置VAR2和其他变量: @ECHO ON SET ABC=IQ SET VAR=value ECHO %VAR% VERIFY OTHER 2>nul SETLOCAL ENABLEEXTENSIONS IF ERRORLEVEL 1 ( ECHO Unable to enable extensions ) IF DEFINED VAR ( IF "%VAR%" == "code" call :Result IF "%VAR%
@ECHO ON
SET ABC=IQ
SET VAR=value
ECHO %VAR%
VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 (
ECHO Unable to enable extensions
)
IF DEFINED VAR (
IF "%VAR%" == "code" call :Result
IF "%VAR%" == "code2" call :Result
IF "%VAR%" == "value" call :Result
SET VAR2=C:\abc\files
) ELSE (
SET VAR2=C:\abc\file\pic & ECHO VAR not defined
)
endlocal & SET VAR3=val
:Result
SET NAME=CODE & SET VAR2=C:\abc\file
当我执行上述代码时,我得到输出:
SET ABC=IQ
SET VAR=valu
ECHO valu
valu
VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 (ECHO Unable to enable extensions )
IF DEFINED VAR (
IF "valu" == "code" call :Result
IF "valu" == "code2" call :Result
IF "valu" == "value" call :Result
SET VAR2=C:\abc\files
) ELSE (SET VAR2=C:\abc\file\pic & ECHO VAR not defined )
endlocal & SET VAR3=val
SET NAME=CODE & SET VAR2=C:\abc\file
但当未定义VAR时,甚至会执行:RESULT节。
当VAR!=值,甚至比:正在执行结果节。
有什么建议吗?您应该将
:Result
块移到if块之外(例如,就在:END上方是一个合适的位置;只需在:Result
块之前放置一个转到END
,以避免不必要的运行)。然后在if块内调用:Resultnotgoto Result
。有关更多文档,请在命令行上执行
call/?
(也可以执行goto/?
以供参考)。这也适用于所有其他命令,例如,set/?
,if/?
,等等
由于我看不到您将值设置为VAR
的位置,您当前的条件如果定义了VAR
将始终为false。因此,我认为您的脚本需要比移动结果块更谨慎。或者它只是一个简化的例子,那么就不用担心了;)可以在if条件之前放置一个
echo%VAR%
,以进行调试并验证是否存在值
出于调试目的,请尝试在第一行中的上使用@ECHO。这为您提供了批处理文件执行的所有步骤,并有助于查找错误
在第二次代码更新后更新:
尝试这样的结构:
[...]
goto eof
:Result
... your result block here
goto eof
[...]
:eof
这样,当解释器从上到下运行时,您可以防止:Result块被执行。
此外,我建议不要使用符号和链(&
)。如果可能的话,在每行中选择一个命令。
您没有添加所有%
符号。没有它们,你发布的代码就毫无意义。
另外,您似乎完全删除了:Result块,但仍将其称为…
我很困惑
请查看其他来源的帮助,例如www.ss64.com(CMD)和一些教程。对不起,我下次不会更新我的答案。无论如何,这个问题已经结束。您应该将:Result
块移到if块之外(例如,就在:END上方将是一个合适的位置;只需在:Result
块之前放置一个转到END
,以避免不必要的运行)。然后在if块内调用:Result
notgoto Result
。@ECHO ON
SET "ABC=IQ"
SET "VAR=value"
ECHO(%VAR%
VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 (
ECHO Unable to enable extensions
)
IF DEFINED VAR (
IF "%VAR%" == "code" call :Result
IF "%VAR%" == "code2" call :Result
IF "%VAR%" == "value" call :Result
SET "VAR2=C:\abc\files"
) ELSE (
SET "VAR2=C:\abc\file\pic" & ECHO VAR not defined
)
rem Set VAR2, VAR3 and NAME outside the current local scope.
ENDLOCAL & (
SET "VAR2=%VAR2%"
SET "VAR3=val"
SET "NAME=%NAME%"
)
rem Display variables set beginning with VAR and NAME.
SET VAR
SET NAME
rem End the code here to prevent continuing into the following label.
EXIT /B 0
:Result
SET "NAME=CODE" & SET "VAR2=C:\abc\file"
有关更多文档,请在命令行上执行call/?
(也可以执行goto/?
以供参考)。这也适用于所有其他命令,例如,set/?
,if/?
,等等
由于我看不到您将值设置为VAR
的位置,您当前的条件如果定义了VAR
将始终为false。因此,我认为您的脚本需要比移动结果块更谨慎。或者它只是一个简化的例子,那么就不用担心了;)可以在if条件之前放置一个
echo%VAR%
,以进行调试并验证是否存在值
出于调试目的,请尝试在第一行中的上使用@ECHO。这为您提供了批处理文件执行的所有步骤,并有助于查找错误
在第二次代码更新后更新:
尝试这样的结构:
[...]
goto eof
:Result
... your result block here
goto eof
[...]
:eof
这样,当解释器从上到下运行时,您可以防止:Result块被执行。
此外,我建议不要使用符号和链(&
)。如果可能的话,在每行中选择一个命令。
您没有添加所有%
符号。没有它们,你发布的代码就毫无意义。
另外,您似乎完全删除了:Result块,但仍将其称为…
我很困惑
请查看其他来源的帮助,例如www.ss64.com(CMD)和一些教程。对不起,我下次不会更新我的答案。这个问题已经结束了
@ECHO ON
SET "ABC=IQ"
SET "VAR=value"
ECHO(%VAR%
VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 (
ECHO Unable to enable extensions
)
IF DEFINED VAR (
IF "%VAR%" == "code" call :Result
IF "%VAR%" == "code2" call :Result
IF "%VAR%" == "value" call :Result
SET "VAR2=C:\abc\files"
) ELSE (
SET "VAR2=C:\abc\file\pic" & ECHO VAR not defined
)
rem Set VAR2, VAR3 and NAME outside the current local scope.
ENDLOCAL & (
SET "VAR2=%VAR2%"
SET "VAR3=val"
SET "NAME=%NAME%"
)
rem Display variables set beginning with VAR and NAME.
SET VAR
SET NAME
rem End the code here to prevent continuing into the following label.
EXIT /B 0
:Result
SET "NAME=CODE" & SET "VAR2=C:\abc\file"
在SET
命令名和值周围添加了双引号,以防止包含尾随空格
VAR2
和VAR3
使用与ENDLOCAL
相同的解析代码进行设置,因此它们在全局范围内可用。这是因为在执行SETLOCAL
和执行SET
命令之前,解析的代码将%VAR2%
替换为它的值
添加了EXIT/b0
以结束代码,以便在代码结束时不执行:Result
设置变量的输出
:
如果通过删除行未定义VAR,则设置“VAR=value”
:
许多命令都有帮助信息,因此可以使用command/?
。命令可以是示例set/?
在SET
命令名和值周围添加了双引号,以防止包含尾随空格
VAR2
和VAR3
使用与ENDLOCAL
相同的解析代码进行设置,因此它们在全局范围内可用。这是因为在执行SETLOCAL
和执行SET
命令之前,解析的代码将%VAR2%
替换为它的值
添加了EXIT/b0
以结束代码,以便在代码结束时不执行:Result
设置变量的输出
:
如果通过删除行未定义VAR,则设置“VAR=value”
:
许多命令都有帮助信息,因此可以使用command/?
。命令可以是示例set/?
上述代码将始终将VAR2
设置为(非空)值。请张贴真实代码,包括设置VAR
和echoVAR2
的部分。请注意,如果查看批处理文件外部的VAR2
,由于setlocal
,在批处理文件内部设置的任何值都将丢失。如果不是因为Goto的错误使用,这些c