代码之家  ›  专栏  ›  技术社区  ›  Beska

Windows批处理文件:是否有添加“and”的方法?

  •  0
  • Beska  · 技术社区  · 15 年前

    简短的版本:有没有方法在批处理文件中写一个“and”或“or”子句?

    稍长的版本:

    我继承了一个Visual Studio项目,该项目创建一个dll,然后将该dll复制到另一个位置。作为后期构建步骤,vs运行以下脚本。

    if not '$(ConfigurationName)' == 'DebugNoSvc' goto end
    
    xcopy /Y $(TargetDir)*.config $(ProjectDir)..\myService\bin\Debug
    xcopy /Y $(TargetDir)*.config $(ProjectDir)..\myService\bin\DebugNoSvc
    
    :end
    

    当项目编译为debug时似乎有问题,因为它不进行复制(我猜在某个时候中间部分已经更新了,但是if子句没有更新)。

    在批处理的“if”子句中,是否有一种简单的方法来执行复杂的布尔逻辑?

    4 回复  |  直到 15 年前
        1
  •  2
  •   Kyle Alons    15 年前
    if not '$(ConfigurationName)' == 'Debug' goto test2
    
    xcopy /Y $(TargetDir)*.config $(ProjectDir)..\myService\bin\Debug
    goto end
    
    :test2
    if not '$(ConfigurationName)' == 'DebugNoSvc' goto end
    
    xcopy /Y $(TargetDir)*.config $(ProjectDir)..\myService\bin\DebugNoSvc
    
    :end
    
        2
  •  1
  •   Mark Wilkins    15 年前

    对于标准的DOS批处理,我认为您需要一个 if 已发布的对账单。另一种可能是使用 JP Software's command processor 指挥。他们有免费版本。它比普通的DOS shell有了很大的改进,并且有很多非常酷的功能,包括使用 .and. .or. 在一个 如果 语句。

        3
  •  0
  •   Beska    15 年前

    我开始认为这样的事情可能是最好的解决方案,但我真的不确定:

    if '$(ConfigurationName)' == 'DebugNoSvc' goto copyDebugNoSvc
    if '$(ConfigurationName)' == 'Debug' goto copyDebug
    goto end
    
    :copyDebugNoSvc
    xcopy /Y $(TargetDir)*.config $(ProjectDir)..\hsspringhost\bin\DebugNoSvc
    goto end
    
    :copyDebug
    xcopy /Y $(TargetDir)*.config $(ProjectDir)..\hsspringhost\bin\Debug
    goto end
    
    :end
    
        4
  •  0
  •   ewall    15 年前

    直接回答您的第一个问题:是的,在Windows批处理文件(A/K/A NT shell)中有一个“and”允许您在同一行上执行多个操作:与号 & . 还有一个“分组”选项,允许您将一组行视为单个实体:括号 ( ... ) .

    echo Hello, world & if "%windir%"=="C:\WINDOWS" (
    echo from Windoze
    )
    

    但不确定这对你的处境有何帮助…我怀疑贝斯卡的建议 if '$(ConfigurationName)' == 'Debug' ... 不过,可能会有所帮助。