任何人都可以帮助有效和安全地从批处理变量中删除引号吗?
我编写了一个批处理文件,它成功导入参数列表%1,%2,%3等,并将它们放入命名变量中.其中一些参数包含多个单词,因此用双引号括起来.
> "Susie Jo" (%1)
> "Smith Barnes" (%2)
> "123 E. Main St." (%3)
Run Code Online (Sandbox Code Playgroud)
接下来将这些%变量放在命名变量中:
> set FirstName=%1
> set LastName=%2
> set ShipAddr=%3
Run Code Online (Sandbox Code Playgroud)
变量验证由echo完成.
echo.%FirstName%
echo.%LastName%
echo.%ShipAddr%
结果显示为
"Susie Jo"
"Smith Barnes"
"123 E. Main St."
Run Code Online (Sandbox Code Playgroud)
我需要消除所选变量的包含引号.例如,FirstName和LastName在别处使用,不得包含引号.
在测试批处理文件中,我成功地使用变量中的~tilde字符来消除引号.
> set FirstName=%~1
> set LastName=%~2
Run Code Online (Sandbox Code Playgroud)
我以为我有解决方案,但我很快就遇到了执行批处理文件的异常行为.突然间,CMD无法识别长路径的声明.从完整路径正常执行批处理文件
> C:\Documents and Settings\Administrator\My Documents\Txt\batchtest\dataout.bat
Run Code Online (Sandbox Code Playgroud)
回报
> 'C:\Documents' is not recognized as an internal or external command....
Run Code Online (Sandbox Code Playgroud)
因此,似乎在即将到来的%1%2 ...%n变量中添加了〜tilde字符已经引起了一些变化.可能有些环境变量已被改变?
我还尝试使用FOR命令通过各种尝试清除变量中的引号.这似乎很尴尬,我无法通过创建执行任务的变量列表来学习如何实现这一目标:
这样的事情:
for %%g in (%FirstName% %LastName%) do (
set %%g=%%~g
set %%h=%%~h …Run Code Online (Sandbox Code Playgroud) 我有一个我正在创建的Windows批处理文件,但我必须ECHO一个大的复杂字符串,所以我必须在任何一端放双引号.问题是引号也正在被我正在写入的文件进行ECHO.你如何回收这样的字符串并删除引号?
更新:
我花了最近两天的时间来研究这个问题,最后能够将这些东西融合在一起.理查德的回答是剥离引号,但即使我把ECHO放在子程序中并直接输出字符串,Windows仍然挂在字符串中的字符上.我会接受理查德的回答,因为它回答了问题.
我最终使用了Greg的sed解决方案,但由于sed/windows错误/功能而不得不修改它(它没有帮助它没有文档).在Windows中使用sed有一些注意事项:你必须使用双引号而不是单引号,你不能直接转义字符串中的双引号,你必须结束字符串,使用^进行转义(所以^"然后,有人指出,如果你将输入管道输入到sed,那么管道中有一个管道存在错误(我没有得到验证,因为在我的最终解决方案中,我刚发现一种不在字符串中间包含所有引号的方法,只是删除了所有引号,我永远不能让endquote自行删除.)感谢所有的帮助.