加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 包含空格,双引号,管道的批处理文件参数

发布时间:2020-12-13 20:42:36 所属栏目:Windows 来源:网络整理
导读:我有一个批处理文件,需要传递一个包含管道和空格的参数.由于空格,在传入参数时需要将双引号附加到参数中.我需要去掉那些双引号并回显参数.通常情况下,使用?会让我这样做,但我认为我传入的具体参数会导致问题.如果我这样做: [test1.bat] call test2.bat "Acc
我有一个批处理文件,需要传递一个包含管道和空格的参数.由于空格,在传入参数时需要将双引号附加到参数中.我需要去掉那些双引号并回显参数.通常情况下,使用?会让我这样做,但我认为我传入的具体参数会导致问题.如果我这样做:

[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 /?中描述).

但扩展着!变量!还会阻止任何进一步解析的内容,因为延迟扩展是批处理行解析的最后阶段.
详细说明如下
how does the windows command interpreter cmd exe parse scripts

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读