2010-04-07 64 views
0

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

稍长版本:

我继承,创建一个DLL,然后该DLL到另一个位置拷贝一个Visual Studio项目。作为后期构建步骤,VS运行以下脚本。

if not '$(ConfigurationName)' == 'DebugNoSvc' goto end 

xcopy /Y $(TargetDir)*.config $(ProjectDir)..\myService\bin\Debug 
xcopy /Y $(TargetDir)*.config $(ProjectDir)..\myService\bin\DebugNoSvc 

:end 

它看起来像有当项目被编译为调试一个问题,因为它不会做副本(我猜,在某些时候中段得到了更新,但如果条款没” t)

有没有一种简单的方法来批量处理“if”子句中的复杂布尔逻辑?

+0

我在想,你想要什么,听起来更像是一个'OR'而不是'AND'。这种差异是显着的,因为贝斯卡在'OR'的情况下回答这听起来像你的意思,Kyle Alons回答了你实际询问的'AND'的情况。那么你真正想要的是'AND'还是'OR'? – 2010-04-07 13:58:23

+0

嗯,这取决于...我可以真正使用任何一个,这取决于我如何使用NOT ...在这种情况下,我要求一个AND,所以我可以将其更改为像IF NOT A和NOT B GOTO END这样的东西,但是我也可以使用一个OR,通过说IF A或B DO COPY ELSE END。随你。我主要只是在寻找复杂的布尔逻辑是否可用。 (不幸的是,它看起来像“不”)。 – Beska 2010-04-07 14:03:27

回答

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 
+0

这实际上更像是一个'OR'子句,但我同意它看起来像他想要的,尽管他要求'AND' – 2010-04-07 14:03:32

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 
+0

这实际上更像是一个“或”条款,但我同意它看起来像他想要的,即使他要求“AND”。 – 2010-04-07 13:59:08

1

随着标准的DOS批处理,我想你需要的一个已发布多个if报表。另一种可能性是使用类似JP Software's command processor的命令。他们有一个免费版本。它比普通的DOS shell有很大的改进,并且具有很多非常酷的功能,包括在if语句中使用.and..or.的能力。

0

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

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

不知道你的情况如何,可以帮助,但...我怀疑的if '$(ConfigurationName)' == 'Debug' ... Beska的建议可能会有所帮助,但是。

相关问题