找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24074|回复: 3

[转贴] [转]批处理如何从用户传入的参数中去掉引号?

[复制链接]
发表于 2008-1-6 21:42:22 | 显示全部楼层 |阅读模式
如何从用户传入的参数中去掉引号?
     来源:http://www.cn-dos.net/forum/viewthread.php?tid=20838&fpage=1&highlight=%E5%8E%BB
      很多情况下,我们需要脱除一个字符串中可能会存在的引号,然后在加上自己的引号使其中的特殊字符(命令连接符&、|、&&、||,命令行参数界定符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
      二、如果字符串的引号分布情况很复杂,或者我们对被脱去引号的位置有特殊要求,或者字符串中可能出现某些控制字符,则可以使用以下方案:
      2-1、可以使用%test:*"=%脱去环境变量test串首的第一个引号,如果串首不存在引号则变量值不变;
      2-2、可以使用set "test=%test%脱去环境变量test串尾的最后一个引号,如果串尾不存在引号则变量值被清空;
      2-3、可以使用%test:*"=set "test=%脱去环境变量test串最外侧的一对引号,如果串外侧不存在引号则出现语法错误;
      2-4、可以使用set "test=%test:"=%"脱去环境变量test串中可能出现的所有引号,如果串外侧不出现引号则变量值不变;与1-3不同的是,它可以容许字符串的匹配引号对内出现特殊控制字符。
发表于 2009-11-9 17:43:42 | 显示全部楼层
挺实用的小技巧。。
发表于 2010-12-11 23:53:02 | 显示全部楼层
好多的方法啊,但使用的却只有一个,学习了。
发表于 2010-12-12 12:57:21 | 显示全部楼层
我就用过一个. 呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:49 , Processed in 0.017704 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表