2010-04-07 34 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的建議可能會有所幫助,但是。

相關問題