搜索尾随引号字符和 trim 的字符串?

Search string for trailing quote character and trim it?

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

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

中间那句多余的话需要去掉。我找到了很多方法来搜索 file 的字符串,我在 Whosebug 上发现 this post 似乎适用,但在我的中似乎不起作用情况。

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

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

这导致:"The syntax of the command is incorrect."

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

出于这个原因,我在处理路径时使用了一个 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

这对你有用吗?

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