批处理字符串去除两边的引号(转)

本文详细介绍了如何从用户传入的参数中去掉引号,包括简单方法和复杂情况的处理策略,以及如何在批处理脚本中实现字符串拼接操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何从用户传入的参数中去掉引号?

批处理获取到用户输入的参数,如
utility "C:\program files\utility",

如何去掉"C:\program files\utility" 的引号?
要做一些字符串拼接的操作,如

@echo off
@set arg=%1
@set file_path=%arg%\readme.txt
@for /f "usebackq delims=" %%a in (%file_path%) do set a=%%a

运行上诉代码提示:
The system cannot find the file C:\Program Files\utility"\version.txt

请问如何解决?


───────────────── 版主提示 ─────────────────
本主题讨论小结如下:

  很多情况下,我们需要脱除一个字符串中可能会存在的引号,然后在加上自己的引
号使其中的特殊字符(命令连接符& 、| 、&&、||,命令行参数界定符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 不同的是,它容许字符串的匹配引号对内
出现特殊控制字符;

 

转自http://blog.sina.com.cn/s/blog_4ad042e50100p7zx.html

 

### 如何在Java中去掉字符串首尾的引号 在 Java 中有多种方式可以实现去除字符串首尾的双引号。以下是几种常见的方式: #### 使用 `replaceAll()` 方法 通过正则表达式匹配并移除位于字符串起始位置和结束位置的双引号。 ```java public class RemoveQuotesExample { public static void main(String[] args) { String originalStr = "\"Hello World\""; String result = originalStr.replaceAll("^\"|\"$", ""); System.out.println(result); } } ``` 此代码片段展示了如何利用 `replaceAll` 函数来清除目标字符串两端可能出现的一对双引号[^1]。 #### 应用 `substring()` 结合条件判断 先验证字符串确实是以双引号作为开头和结尾字符,再执行截取操作以排除这两个特定的位置上的符号。 ```java public class SubstringMethodExample { public static void main(String[] args) { String strWithQuotes = "\"Sample Text\""; if (strWithQuotes.startsWith("\"") && strWithQuotes.endsWith("\"")) { String noQuotes = strWithQuotes.substring(1, strWithQuotes.length() - 1); System.out.println(noQuotes); } else { System.out.println(strWithQuotes); } } } ``` 这段示例说明了当确认输入字符串满足一定条件下才应用 `substring` 来达到目的的方法[^4]。 #### 组合使用 `trim()` 和 `replace()` 首先调用 `trim()` 移除任何潜在的空白符,接着采用 `replace()` 将所有的双引号替换成空串从而完成整个过程。 ```java public class TrimAndReplaceExample { public static void main(String[] args) { String input = " \"Another Example\" "; String output = input.trim().replace("\"", ""); System.out.println(output); } } ``` 这里展示了一种更为通用的做法,它不仅能够处理标准情况下的双引号问题,还能应对那些可能带有额外空格的情形[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值