使用空格,双引号,pipe道batch file参数

我有一个batch file,需要传递一个参数,将包括pipe道和空间。 由于空格的原因,在传入参数时,需要将双引号附加到参数中。我需要去除这些双引号并回显参数。 通常情况下,使用〜会让我这样做,但我认为我通过的具体参数的一些问题导致一个问题。 如果我这样做:

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

那么如何删除双引号并仍然有一个可用的variables?

Solutions Collecting From Web of "使用空格,双引号,pipe道batch file参数"

你可以使用延迟扩展,因为它不关心特殊字符。
唯一的问题是将参数内容放入一个变量中,因为它只能通过百分比扩展进行传输。
但在你的情况下,这应该工作。

 @echo off setlocal DisableDelayedExpansion set "str=%~1" setlocal EnableDelayedExpansion echo !str! 

备注,我先禁用延迟扩展,那么! 和^不会被%1的扩展修改

编辑:延迟扩展可以禁用或启用

 setlocal DisableDelayedExpansion setlocal EnableDelayedExpansion 

如果启用,它会添加另一种扩展变量的方法( !variable!而不是%variable% ),主要用于防止变量的括号块效应(在set /?描述)。

但是用!variable!扩展!variable! 也阻止了任何进一步解析的内容,因为延迟扩展是批处理线解析的最后阶段。
详细地解释了Windows命令解释器cmd exe如何解析脚本

 @echo off if "%~2"=="" ( call %0 "Account|Access Level|Description" dummy ) ELSE ( setlocal ENABLEEXTENSIONS for /F "tokens=*" %%A IN ("%~1") DO @echo.%%A ) 

不完全漂亮,但它的作品。 处理特殊字符在批处理文件中总是很痛苦…