簡體   English   中英

帶有空格,雙引號,管道的批處理文件參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM