Windows 带有空格、双引号和管道的批处理文件参数
我有一个批处理文件,需要传递一个包含管道和空间的参数。由于空格的原因,传入参数时需要将双引号附加到参数。我需要去掉那些双引号并回显参数。通常,使用~可以让我这样做,但我认为我传入的特定参数会导致问题。如果我这样做: [test1.bat]Windows 带有空格、双引号和管道的批处理文件参数,windows,batch-file,Windows,Batch File,我有一个批处理文件,需要传递一个包含管道和空间的参数。由于空格的原因,传入参数时需要将双引号附加到参数。我需要去掉那些双引号并回显参数。通常,使用~可以让我这样做,但我认为我传入的特定参数会导致问题。如果我这样做: [test1.bat] call test2.bat "Account|Access Level|Description" [test2.bat] echo %1 echo %~1 然后运行test1.bat,我得到以下输出: "Account|Access Level|Desc
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
if "%~2"=="" (
call %0 "Account|Access Level|Description" dummy
) ELSE (
setlocal ENABLEEXTENSIONS
for /F "tokens=*" %%A IN ("%~1") DO @echo.%%A
)
不是很漂亮,但很管用。处理特殊字符在批处理文件中总是一件痛苦的事情…您可以使用延迟扩展,因为它不关心特殊字符。
唯一的问题是将参数内容放入变量中,因为它只能通过百分比扩展进行传输。
但在你的情况下,这应该是可行的
@echo off
setlocal DisableDelayedExpansion
set "str=%~1"
setlocal EnableDelayedExpansion
echo !str!
备注:我先禁用延迟扩展,所以!和^未被%1的扩展修改
编辑:可以使用禁用或启用延迟扩展
setlocal DisableDelayedExpansion
setlocal EnableDelayedExpansion
如果启用,它将添加另一种扩展变量的方法(!variable!
而不是%variable%
),主要用于防止变量的括号块效应(如设置/?
所述)
但是用进行扩展!变数代码>还阻止任何进一步解析的内容,因为延迟扩展是批处理行解析的最后阶段。
详细说明见
成功了!非常感谢你!你能告诉我为什么它有效吗?当我禁用或启用“延迟扩展”时,我在做什么?您如何将一个双引号传递到该文件中?每当我试图调用一个批处理文件引用它时,比如\blah.cmd“asdf”“123”
echo!str代码>输出两个双引号,而不是一个。如何将文字双引号传递到该文件中?当我尝试时(通过\play2.cmd“a b”c“dummy
),我得到两个双引号,而不是1。