2017-06-10 44 views
1

我需要在批處理文件中有一個IF語句,該文件根據FileName採取不同的操作。由於我已經處理了該部分,因此該行爲無關緊要。我無法弄清楚如何讓我的IF聲明發揮作用。我試圖對FileName進行子串處理,但無法使其正常工作。總之,如果FileName具有「Orders」,而另一個名稱中包含「Accessories」,我想要做一件事。如果批處理文件中的語句

IF "%1:~0,18%" == MyFileName1_Orders (
    sqlcmd MyCommand) 

IF "%1:~0,23%" == MyFileName1_Accessories (  
    sqlcmd MyCommand) 

在此先感謝

感謝您的答覆脫線。我按照你的表現做了,但不幸的是它仍然無法工作。在這個批處理文件中,我現在唯一的三行是:set「name =%1」。仍然沒有運氣。

我也嘗試看看文件「包含」我想要substring的話,但我不能讓它發射我的sqlcmd線。我遵循這個例子。我可以得到它迴應出正確的東西,所以我知道它正在工作,但似乎並沒有消除(sqlcmd ...)部分。如果sqlcmd部分是批處理文件中唯一的部分,它每次都能完美地工作。批處理文件:查找子字符串是否在字符串中(不在文件中)

保羅我也試過你的建議,我也有同樣的結果;它不會觸發我的sqlcmd。就像我說的,這個sqlcmd已經工作了很多年了,如果它是bat文件中唯一的東西,它會繼續工作。一旦我添加IF,它就停止工作。

+2

條件的雙方只有在雙方都用雙引號括起來的情況下才會匹配。另外變量應該是字母字符。 – Compo

回答

0

沒關係 - 我使用PowerShell的,而不是和它的作品就像一個冠軍。感謝所有的答覆。

0

子變量不支持元變量 - 您需要將值傳遞給普通環境變量。

set "name=%1" 
IF "%name:~0,18%" == "MyFileName1_Orders" (sqlcmd MyCommand) 

應該工作,假定這些代碼隔離線被包含在其中的名稱被供給作爲第一個參數的子程序。

而且如果if的一個參數是引用,那麼這兩個必須

0

嘗試是這樣的:在這個問題上

set fn=%~1 
if not "%fn:orders=%" == "%fn%" (sqlcmd MyCommand) 
if not "%fn:accessories=%" == "%fn%" (sqlcmd MyCommand) 
+1

我認爲你在第一個if中缺少'%');) – geisterfurz007