2016-01-29 115 views
0

我有一個命令,我想傳遞到包含引號的批處理文件。我想做的是在下面的參數傳遞作爲單個參數成bat文件:windows命令行通過引號

set parameter=-c myfirstparameter -p "also my first parameter" 

C:\mybat.bat parameter 

不幸的是這最終是:

%1 = -c 
%2 = myfirstparameter 
etc 

我要的是

%1 = -c myfirstparameter -p "also my first parameter" 
+0

待辦事項你實際上需要引用「也是我的第一個參數」? –

+0

@DevilsAdvocate是 –

+1

[將批處理文件引入包含含空格的引用的參數]的可能重複(http://stackoverflow.com/questions/2618690/passing-a-batch-file-an-argument-containing-a -quote-containing-a-space) –

回答

1

下面是使用一個臨時文件(as found here)來傳遞所述參數的一個工作示例:

FIRST .BAT

echo -c myfirstparameter -p "also my first parameter">dummy.txt 
second.bat 

SECOND.BAT

set /p param=<dummy.txt 
echo %param% 

這裏是原始輸出:

C:\temp\batchtest>first 

echo -c myfirstparameter -p "also my first parameter" 1>dummy.txt 

second.bat 

set /p param= 0<dummy.txt 

echo -c myfirstparameter -p "also my first parameter" 
-c myfirstparameter -p "also my first parameter" 

C:\temp\batchtest> 
-2

您需要引用該參數。請嘗試使用簡單的測試.bat腳本。

echo %* 
echo %1 
echo %~1 
set IT=%~1 
echo %IT% 

set IT=%* 
echo %IT% 
echo %IT:~1,-1% 

C:> y.bat 「-p ARF 」asdfasdf asdfasdf「」

+0

%*是唯一給我提供所需結果的東西,即使工作,當我嘗試將它傳入我的蝙蝠文件中的程序 –

+0

是的,嘗試'c:> y.bat「-p arf」asdfasdf asdfasdf「」'',你可能會看到這個問題 –

+0

好的,我看到問題。我修改了代碼以使用所有參數。 – lit

3

你不能做你想做的。批處理在解析參數時使用[空格],[逗號],[分號],[等號],[製表符]和[0xFF]作爲令牌分隔符。如果您想在參數值中使用令牌分隔符,則必須引用分隔符。無法轉義令牌分隔符。因此,不可能擁有帶引號和不帶引號的令牌分隔符文字的單個參數。

推測您的問題中的頂級代碼是錯誤的。爲了得到你所描述的結果,你必須有

set parameter=-c myfirstparameter -p "also my first parameter" 
C:\mybat.bat %parameter% 

來處理這種情況的最好辦法是通過引用傳遞的參數,它需要修改你的mybat.bat。

而是通過%1檢索值,您必須啓用延遲擴展和使用!%1!

@echo off 
setlocal enableDelayedExpansion 
set "argument1=!%1!" 

有了這樣的安排,你的確會使用以下調用腳本:

set parameter=-c myfirstparameter -p "also my first parameter" 
C:\mybat.bat parameter 
+1

'argument =!%1!'應該是類似於'set argument1 =!%1!' –

+1

也是我喜歡你從「你不能做你想做的事」然後繼續向他展示exa ctly如何做到這一點:D –

+1

@DevilsAdvocate - 您的第一條評論的好處。我相應地修改了我的答案。 – dbenham