美文网首页
BAT 参数去引号(各种去引号的奇葩方式)

BAT 参数去引号(各种去引号的奇葩方式)

作者: 14px | 来源:发表于2019-03-19 22:06 被阅读0次

很多情况下,我们需要脱除一个字符串中可能会存在的引号,然后在加上自己的引 号使其中的特殊字符(命令连接符& 、| 、&&、||,命令行参数界定符Space 、tab 、 ; 、= ,字符化转义符^ 、" ,变量化转义符% 等)字符化,失去特定的作用,而作为 普通的字符成为字符串的一个组成部分。

一、将字符串中的引号脱去的简单办法有三种,它们的功能相近,只是各自的使用 场合不同,可以处理大多数的情况。

1-1 、如果字符串存在于命令行参数%1中,可以使用%~1 脱去第一对外侧引号,如 果没有外侧引号则字符串不变;

1-2 、如果字符串存在于for 替代变量%%i 中,可以使用%%~i脱去第一对外侧引号, 如果没有外侧引号则字符串不变;

1-3 、如果字符串存在于环境变量%temp%中,可以使用%temp:"=% 脱去其中所有的 引号,如果没有引号则字符串不变;

1-4 、以上三种方案在某种程度上可以互相通用,因为它们作为变量的一种类型, 可以通过类似以下的代码或代码片断相互转移:

1-4-1、for替代变量转命令行参数: call:DeQuote %%i 1-4-2、环境变量转命令行参数:call:DeQuote %temp% 1-4-3、命令行参数转for替代变量:for %%i in (%1) do ... 1-4-4、环境变量转for替代变量:for %%i in (%temp%) do ... 1-4-5、命令行参数转环境变量:set temp=%1 1-4-6、for替代变量转环境变量:for ... set temp=%%i

二、如果字符串的引号分布情况很复杂,或者我们对被脱去引号的位置有特殊要求, 或者字符串中可能出现某些控制字符,则可以将字符串首先通过1-4 中的对应方法转存 至环境变量中,在使用以下方案或其组合进行处理:

2-1 、可以使用set var=%var:~1%脱去环境变量var 串首的第一个引号,如果串首 不存在引号则第一个字符被脱去;

2-2 、可以使用set %var:*"=% 脱去环境变量var 串首的第一个引号,如果串首不 存在引号则变量值不变;

2-3 、可以使用set var=%var:~0,-1% 脱去环境变量var 串尾的最后一个引号,如 果串尾不存在引号则最后一个被脱去;

2-4 、可以使用set "var=%var%脱去环境变量var 串尾的最后一个引号,如果串尾 不存在引号则环境变量被清空;

2-5 、可以使用set var=%var:~1,-1% 脱去环境变量var 串最外侧的一对引号,如 果串外侧不存在引号则外侧一对字符被脱去;

2-6 、可以使用%var:*"=set "var=%脱去环境变量var 串最外侧的一对引号,如果 串外侧不存在引号则出现语法错误;

2-7 、可以使用set "var=%var:"=%"脱去环境变量var 串中可能出现的所有引号, 如果串外侧不出现引号则变量值不变;与1-3 不同的是,它容许字符串的匹配引号对内 出现特殊控制字符;

相关文章

  • BAT 参数去引号(各种去引号的奇葩方式)

    很多情况下,我们需要脱除一个字符串中可能会存在的引号,然后在加上自己的引 号使其中的特殊字符(命令连接符& 、| ...

  • SQLi-LAB lesson4 Error based解析

    单引号测试 无反应 双引号报错: 添加一层括号 还是会报错 单引号添加就不会报错 推测是双引号包含传参,因为双引号...

  • 四 常量以及数据类型

    一:PHP的定义方式以及各自区别 定义方式 单引号,双引号,heredoc和newdoc 区别 单引号不能解析 变...

  • PHP-数据类型与常量

    PHP字符串的定义方式及各自区别 定义方式:单引号双引号heredoc 和newdoc 区别单引号不能解析变量单引...

  • ES6学习(3)模板字符串、简化对象和函数写法

    字符串声明的几种方式:单引号,双引号,反引号 反引号特点 字符串中可以出现换行符; 可以使用 ${xxx} 形式引...

  • Python基础语法——字符串

    认识简单字符串 Python 中的字符串有几种表达方式,可以使用单引号、双引号或三引号(三个单引号或三个双引号)括...

  • 字符串

    字符串的表示方式 使用单引号 使用双引号 使用三个单引号 使用三个双引号 转义字符——\ 在字符串前面添加r 下标...

  • 单引号双引号

    'a'是个字符,实质上是个ASCII数值; "a"是个字符串,实质上是一个地址;这个地址指向的内存空间保存着a和'...

  • 一些用法

    一.json的数据需要用“” 双引号包围,用单引号会报错 二.if 参数: if语句后面只跟参数的话,代表如果参...

  • 【吃饭的家伙】单引号-双引号-不加引号-反引号区别

    运维学习交流群-点我加群:598972270 必会含义 ''" 所见即所得 引号里面的内容会原封不动的显示出来 ...

网友评论

      本文标题:BAT 参数去引号(各种去引号的奇葩方式)

      本文链接:https://www.haomeiwen.com/subject/stuomqtx.html