简短版本:有没有办法在批处理文件中编写“和”或“或”子句?
稍长的版本:
我继承了一个创建dll的Visual Studio项目,然后将该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子句没有。)< / p>
是否有一种简单的方法可以在批处理中的“if”子句中执行复杂的布尔逻辑?
答案 0 :(得分:2)
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
答案 1 :(得分:1)
使用标准DOS批处理,我认为您需要已发布的多个if
语句之一。另一种可能性是使用像JP Software's command processor Take Command这样的东西。他们有免费版本。它比普通的DOS shell有了很大的改进,并且具有许多非常酷的功能,包括在.and.
语句中使用.or.
和if
的能力。
答案 2 :(得分:0)
我开始认为这样的事情可能是最好的解决方案,但我真的不确定:
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
答案 3 :(得分:0)
直接回答你的第一个问题:是的,在Windows批处理文件(a / k / NT shell)中有一个“和”,它允许你在同一行上做多个事情:&符号&
。还有一个“分组”选项,允许您将一组行视为单个实体:括号( ... )
。
echo Hello, world & if "%windir%"=="C:\WINDOWS" (
echo from Windoze
)
不确定这对你的情况有何帮助,但是......我怀疑贝斯卡对if '$(ConfigurationName)' == 'Debug' ...
的建议可能会有所帮助。