【问题标题】:Search string for trailing quote character and trim it?搜索字符串以查找尾随引号字符并修剪它?
【发布时间】:2018-10-22 19:05:16
【问题描述】:

我正在尝试在字符串(用户在提示输入路径时输入)中搜索尾随引号,如果找到则将其删除。

问题:我有一个 bat 文件,提示用户输入文件名和路径(第一个通常通过拖放完成。)如果用户输入的目标路径用引号括起来,因为它包含空格,我的结果命令将如下所示:compress.exe "c:\source path\"destination.zip"

中间那句多余的引语需要去掉。我找到了很多在 file 中搜索字符串的方法,我在 StackOverflow 上找到了 this post,这似乎适用,但似乎不适用于我的情况。

我在上面的链接路径中尝试了命令,告诉它搜索 \" 而不是 bcd,但代码希望它正在搜索的字符串在执行时已传递给它(作为开关),并且当我尝试修改命令以搜索 srcpath 时,bat 失败。我也试过这个:

if "!srcpath:~-1"=="\"" set srcpath=!srcpath:~0,-1!

这会导致:“命令的语法不正确。”

如何在字符串中搜索尾随引号并修剪它?当要搜索的字符是引号(斜线引号:\")时,我能找到的每种方法似乎都不起作用。

【问题讨论】:

  • 如果你知道他们放了一个前导和尾随引号,只需去掉它们。 for /f "useback tokens=*" %%G in ('%srcpath%') do set srcpath=%%~G。然后您的其他命令如下所示:compress.exe "%srcpath%destination.zip"
  • 不错的壁球手.. 我也想过这个。 ;^) 我展示了我的“hack 方式”,因为它可以用来去除“~”只去除引号的各种东西。

标签: windows batch-file cmd double-quotes


【解决方案1】:

出于这个原因,我在处理路径时使用了 SLOPPY 批处理技巧。 有更优雅的方法,但这同样有效,我永远不必记住我是如何做到的。

首先,90% 的时间.. 我们只想去掉所有引号.. 那就是:

set srcpath=%srcpath:"=%

然后在新的连接路径字符串的前后添加引号。

但如果你真的只想要尾随的..这是我愚蠢的 bash 技巧..

1. Add a "? to the end of your string
2. Then delete ""? from that string
3. Then delete "? from that string

嗯!从未失败! 这里的诀窍是问号不是有效的路径字符。

:: SAMPLE -- Just a trailing quote removed
set srcpath="c:\source path\"
set srcpath=%srcpath%"?
set srcpath=%srcpath:""?=%
set srcpath=%srcpath:"?=%
echo srcpath=%srcpath%

::You can use the SAME TRICK to remove a trailing backslash

【讨论】:

  • 谢谢。 "=% 方法似乎有效。我不太确定它是如何或做什么的,但只要它有效。谢谢。:)
  • 不客气,但我希望能收到支票,因为我前一天提交了完全相同的解决方案。
  • 它是如何工作的? %MY_VARIABLE:SEARCH_THING=REPLACE_THING% 在这种情况下,REPLACE_THING 什么都不是,所以:"=% 是用无替换引号。
  • 抱歉,我不知道是谁先回复的。我检查的那个说“一天前”,而你说“18 小时前”。
【解决方案2】:

这对你有用吗?

SET /P "%SRCPATH=Enter the source path "
ECHO %SRCPATH%
ECHO %SRCPATH:"=%

【讨论】:

  • 谢谢。这行得通。结束 % 是方法的一部分还是我可以在其他地方使用 "= 吗?
  • 需要最后的 % 来指定变量的结尾。第三 (3) 行对 " 进行了字符串替换,没有任何内容。我不确定您所说的“在其他地方使用 =”是什么意思。
猜你喜欢
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 2016-01-21
  • 2023-03-31
相关资源
最近更新 更多