3

基本上我有一个变量,其中有一个字符串,它是卸载程序的路径。有时当变量被返回时,它会返回类似

"C:/path to uninstall file/uninstall.exe"

而其他时候它可能会返回

MsiExec.exe /I{regkeyhere}

这两个都很好,就是当这样的东西返回时

C:/path to uninstall file/uninstall.exe

在导致调用函数失败的文件路径中没有引号的地方。无论如何要检查变量是否以 C: 开头,以及是否确实在字符串的开头和结尾添加了引号?如果它以除 C: 以外的任何东西开头,那么没关系,只有当它有一个带有空格的文件路径时,它才会崩溃。我尝试了几个不同的字符串替换,但由于某种原因,它总是崩溃。

4

1 回答 1

2

使用插入符号来转义引号:

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:<我意识到像and这样的毒字符会有更多问题>,所以这段代码会在处理之前先转义这些毒字符。

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
于 2013-04-19T14:57:16.490 回答