![](/img/trans.png)
[英]How to pass string with double quotes as command line parameter to a batch file
[英]Batch file parameter with spaces, double quotes, pipes
我有一個批處理文件,需要傳遞一個包含管道和空格的參數。 由於空格,在傳入參數時需要將雙引號附加到參數上。我需要去掉那些雙引號並回顯參數。 通常,使用〜會讓我這樣做,但我認為我傳入的具體參數會導致問題。 如果我這樣做:
[test1.bat]
call test2.bat "Account|Access Level|Description"
[test2.bat]
echo %1
echo %~1
並運行test1.bat,我得到這個輸出:
"Account|Access Level|Description"
'Access' is not recognized as an internal or external command, operable program or batch file.
那么如何刪除雙引號並仍然有一個可用的變量?
您可以使用延遲擴展,因為它不關心特殊字符。
唯一的問題是將參數內容放入變量中,因為它只能通過百分比擴展來傳輸。
但在你的情況下這應該工作。
@echo off
setlocal DisableDelayedExpansion
set "str=%~1"
setlocal EnableDelayedExpansion
echo !str!
備注,我先禁用延遲擴展,所以! 和^不會被%1的擴展修改
編輯:可以禁用或啟用延遲擴展
setlocal DisableDelayedExpansion
setlocal EnableDelayedExpansion
如果啟用,它會添加另一種擴展變量的方法( !variable!
而不是%variable%
),primary是為了防止變量的括號塊效應(在set /?
描述)。
但擴展與!variable!
還會阻止任何進一步解析的內容,因為延遲擴展是批處理行解析的最后階段。
詳細說明了windows命令解釋器cmd如何解析腳本
@echo off
if "%~2"=="" (
call %0 "Account|Access Level|Description" dummy
) ELSE (
setlocal ENABLEEXTENSIONS
for /F "tokens=*" %%A IN ("%~1") DO @echo.%%A
)
不完全漂亮,但它的工作原理。 處理特殊字符始終是批處理文件的痛苦......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.