我有一个批处理文件,需要传递一个包含管道和空格的参数。由于存在空格,因此在传入参数时需要将双引号附加到参数上。我需要去掉这些双引号并回显参数。通常,使用 ~ 可以让我做到这一点,但我认为我传入的特定参数会导致问题。如果我这样做:
[测试1.bat]
call test2.bat "Account|Access Level|Description"
[测试2.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 的扩展所修改
EDIT:可以禁用或启用延迟扩展
setlocal DisableDelayedExpansion
setlocal EnableDelayedExpansion
如果启用,它会添加另一种扩展变量的方式(!variable!
代替%variable%
),主要是为了防止变量的括号效应(描述于set /?
).
但扩展与!variable!
还阻止任何进一步解析的内容,因为延迟扩展是批处理行解析的最后阶段。
详细解释见windows命令解释器cmd exe如何解析脚本
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)