Batch file 批次不工作(如果有)

Batch 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

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 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=%