基本上我有一个变量,其中包含一个字符串,它是卸载程序的路径。有时当变量返回时,它会返回类似
的内容"C:/path to uninstall file/uninstall.exe"
有时可能会返回
MsiExec.exe /I{regkeyhere}
这两个都很好,当这样的事情被归还时
C:/path to uninstall file/uninstall.exe
文件路径中没有引号导致调用函数失败的情况。无论如何都要检查变量是否以C开头:并且它是否在字符串的开头和结尾添加引号?如果它以C以外的任何东西开头:那么它并不重要,只有它有一个文件路径,其中有空格才能分解。我尝试了几种不同的字符串替换,但由于某种原因,它总是会崩溃。
答案 0 :(得分:1)
使用插入符号来转义引号:
if "%variable:~0,2%"=="C:" set variable=^"%variable%^"
编辑:我意识到如果已经存在引号会出现错误,因此此代码将创建一个测试变量(删除引号)以首先测试变量。如果没有空格,此代码也不会添加引号。
如果它以C:
开头,(如果有空格不添加引号,则添加引号)。
set test=%uninstallStr:"=%
if "%test:~0,2%"=="C:" (
if "%test: =%"=="%test%" (
set uninstallStr=%test%
) else (
set uninstallStr=^"%test%^"
)
)
编辑2:我意识到像<
和>
等毒字符会出现更多问题,所以此代码会在处理之前首先逃避这些毒字符。< / p>
set ^"uninstallStr=^"C:\Program Files ^<x86^>\Price Check by AOL\uninstall.exe^"^"
echo %uninstallStr%
set "test=%uninstallStr:"=%"
set "test=%test:<=^<%"
set "test=%test:>=^>%"
if "%test:~0,2%"=="C:" (
if "%test: =%"=="%test%" (
set uninstallStr=%test%
) else (
set uninstallStr=^"%test%^"
)
)
echo %uninstallStr%
pause