2011-01-26 164 views
3

將一個以=結尾的參數傳遞給批處理文件時遇到了麻煩。考慮這個(>是在Windows XP提示):將參數傳遞給windows批處理文件

> type c.bat 
echo %1 

> c.bat bla= 
bla 

> c.bat "bla=" 
"bla=" 

爲什麼=bla=吞噬?我該如何在參數中傳遞一個=號?

回答

7

這是一個衆所周知的問題:http://support.microsoft.com/kb/35938

你可以繞過它是這樣的:

SET ARG1=bla= && your.bat && SET ARG1= 

和your.bat:

@ECHO OFF 
ECHO %ARG1% 

或者你可以把它作爲一個參數報價(在其周圍使用「」):

your.bat "bla=" 

,然後使用它在批處理文件如下:

echo %~1 

在這種情況下,~那裏只是刪除了引號。

+1

的「unquoting」通過`%〜1`是關鍵,也是當你想通過`調用傳遞的東西給你的函數:my_function_label「%my_var_with_ugly_chars」「 - 不帶引號你會得到的第一個標記參數爲'%1',並且在他們的情況下,您需要刪除引號。 – 2014-09-11 10:56:55

2

閱讀該文檔:

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true

「下面的特殊字符需要引號:& <> [] {}^=;'+,`〜[空白]」

+0

謝謝!但是這說的是=有問題,但不是在這裏發生了什麼(窗口不會抱怨命令有什麼問題),也不知道如何通過bla =。 – 2011-01-26 16:32:54

+0

您可以通過將參數放在引號內來傳遞blah =,就像在上例中一樣。 – 2011-01-26 16:46:07

+0

不完全 - 然後我正在傳遞「bla =」 - 包括引號 - 而不僅僅是bla =正如我所願。但另一個答案表明實際上沒有解決方案。 – 2011-01-26 16:57:16

0

會這樣做嗎?

如果tem.cmd包含

@echo off 
set param=%1 
set param=%param:"=% 
echo %param% 

然後

c:\> tem.cmd "hi=" 

hi= 
1

您可以使用

your.bat "bla=" 

------ your.bat ---- 
echo %~1 

或也

your.bat bla= 

------ your.bat ---- 
echo %* 

最好的解決方法是區分依賴。

的描述是在

call /? 

通常最好是有問題的參數封裝成報價和後來與%~修改刪除引號。
set "param1=%~1"使用的事實是,%~1將在存在時刪除封閉引號。
並且"param1=%~1"附近的引號確保特殊字符不會產生錯誤。

call :myFunc "<Hard>=&|" 
exit /b 

:myFunc 
setlocal EnableDelayedExpansion 
set "param1=%~1" 
echo(!param1! 
exit /b 

但是使用引號內的參數,問題仍然可能發生。

call :myFunc "&"^&"" 
相關問題