Batch file 批次不工作(如果有)
master.batBatch file 批次不工作(如果有),batch-file,cmd,Batch File,Cmd,master.bat @echo off if !%~1! == !--Instance! ( if !%~2! == !old! ( echo Old instance set /p InstanceId= Enter the InstanceId: echo %InstanceId% ) if !%~2! == !new! ( echo Ne
@echo off
if !%~1! == !--Instance! (
if !%~2! == !old! (
echo Old instance
set /p InstanceId= Enter the InstanceId:
echo %InstanceId%
)
if !%~2! == !new! (
echo New instance
)
) else (
if !%~1! neq !--Instance! (
echo Bad command: Unknown Flag/Switch %1
) else (
if !%~2! neq !new! **(
echo Bad command: Incorrect Flag value %2
)
)
)
Q1:上述代码适用于所有条件,但最后一段代码标记为(**)以确保可读性。我不明白为什么?
我正在运行以下命令
master.bat --Instance abc
Q2:另外,我希望更改相同的(**)行,以检查是否有另一个值,如“old”(为清晰起见,请使用引号)。怎么做?这样行吗
if!%~2.内克!新的!或者!%~2.内克!古老的(
回显错误命令:错误的标志值%2
)
问题1的答案:最后我意识到哪里出了问题,实际上控件从未通过(**)到达块
回答问题2:并对上面的代码片段进行轻微更改,它将以预期的方式工作
@echo off
setlocal
if !%~1! == !--Instance! (
if !%~2! == !old! (
echo Old instance
echo %InstanceId%
set /p InstanceId= Enter the InstanceId:
call DescribeOldEC2.bat %InstanceId%
echo %InstanceId%
) else (
if !%~2! == !new! (
echo New instance
) else (
echo Bad command: Incorrect Flag value %2
)
)
) else (
if !%~1! neq !--Instance! (
echo Bad command: Unknown Flag/Switch %1
)
endlocal
代码>在批处理文件中具有特殊意义。你到底为什么要用它们?您是使用延迟扩展来取消引用变量名,还是仅使用感叹号作为分隔符?我不知道它们的确切含义,我想我使用它们作为分隔符!帮你自己一个忙,用引号“
代替感叹号!
。虽然!
在这里工作,但它们迟早会给你带来大麻烦。你不需要IF-in-you-last-ELSE子句-你已经证明了%%1 neq--在那一点上是实例。@Stephan,最初我用的是”“
但是他们过去常常给我找麻烦,然后我看到了代码>在某个地方使用过,它从未给我带来任何麻烦,尽管我仍然不知道如何使用“
或代码>实际工作。你能给我指出一些有用的地方吗?@dbenham ya你是对的,但我保留它是为了让代码更可读,你怎么看?如果你真的想记录ELSE的意思,那么我会使用注释,而不是另一个If语句。您可以添加REM注释,或者使用)else(%=neq--Instance=%