繁体   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