Windows批处理文件:有没有办法添加“和”?

时间:2010-04-07 13:44:05

标签: visual-studio batch-file

简短版本:有没有办法在批处理文件中编写“和”或“或”子句?

稍长的版本:

我继承了一个创建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”子句中执行复杂的布尔逻辑?

4 个答案:

答案 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' ...的建议可能会有所帮助。