將一個以=結尾的參數傳遞給批處理文件時遇到了麻煩。考慮這個(>是在Windows XP提示):將參數傳遞給windows批處理文件
> type c.bat
echo %1
> c.bat bla=
bla
> c.bat "bla="
"bla="
爲什麼=
在bla=
吞噬?我該如何在參數中傳遞一個=號?
將一個以=結尾的參數傳遞給批處理文件時遇到了麻煩。考慮這個(>是在Windows XP提示):將參數傳遞給windows批處理文件
> type c.bat
echo %1
> c.bat bla=
bla
> c.bat "bla="
"bla="
爲什麼=
在bla=
吞噬?我該如何在參數中傳遞一個=號?
這是一個衆所周知的問題:http://support.microsoft.com/kb/35938
你可以繞過它是這樣的:
SET ARG1=bla= && your.bat && SET ARG1=
和your.bat:
@ECHO OFF
ECHO %ARG1%
或者你可以把它作爲一個參數報價(在其周圍使用「」):
your.bat "bla="
,然後使用它在批處理文件如下:
echo %~1
在這種情況下,~
那裏只是刪除了引號。
閱讀該文檔:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true
「下面的特殊字符需要引號:& <> [] {}^=;'+,`〜[空白]」
謝謝!但是這說的是=有問題,但不是在這裏發生了什麼(窗口不會抱怨命令有什麼問題),也不知道如何通過bla =。 – 2011-01-26 16:32:54
您可以通過將參數放在引號內來傳遞blah =,就像在上例中一樣。 – 2011-01-26 16:46:07
不完全 - 然後我正在傳遞「bla =」 - 包括引號 - 而不僅僅是bla =正如我所願。但另一個答案表明實際上沒有解決方案。 – 2011-01-26 16:57:16
會這樣做嗎?
如果tem.cmd包含
@echo off
set param=%1
set param=%param:"=%
echo %param%
然後
c:\> tem.cmd "hi="
給
hi=
您可以使用
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 "&"^&""
的「unquoting」通過`%〜1`是關鍵,也是當你想通過`調用傳遞的東西給你的函數:my_function_label「%my_var_with_ugly_chars」「 - 不帶引號你會得到的第一個標記參數爲'%1',並且在他們的情況下,您需要刪除引號。 – 2014-09-11 10:56:55