2016-05-31 74 views
-2

我刚刚创建了简单的批处理脚本。我想用“-q”之类的开关运行uninstall.exe“-splash Uninstall”在批处理脚本中使用短划线和开关

这里是代码; @echo off echo This script will uninstall some features. pause SET path=C:\Program Files\Program\uninstall.exe -q -splash Uninstall START "" "%path%" pause

如果我运行此代码它给出了一个错误:

Windows cannot find 'C:\Program Files\Program\uninstall.exe -q -splash Uninstall' 
Make sure you typed the name correctly, and then try again. 

如果删除开关,卸载处理正常启动。

那么我该如何在批处理文件中使用这个swtiches?

回答

1

另外,不要使用path作为变量名的任意选择。它在Windows(以及Unix衍生的系统)中具有特殊的意义。

您的主要问题是,您的引用字符串中包含开关,然后将其视为整个可执行文件名。把你的报价大约只有文件名,并留下外面的开关:(对引号的唯一原因是,路径名包含空格的事实)

SET command="C:\Program Files\Program\uninstall.exe" -q -splash Uninstall 
START "" %command% 

而且,你并不真正需要根本不使用变量,但是我使用了一个,因为你使用了一个变量。

+0

工作过,非常感谢你。 – Erdogan

0

我不太确定您遇到的每个程序都会在C:\ Program Files文件(放置程序名称)\目录中有一个uninstall.exe文件等待您。即使这样做,您可能也必须从GUI控制它。但是,看看另一个堆栈溢出线程here,我想称赞用户巴厘岛C.和PA。想出一个可能的解决方案,通过使用注册表项来查找Windows程序的卸载文件,使用批处理文件卸载文件。我会重新粘贴下面PA代码:

@echo off 
for /f "tokens=*" %%a in ('reg query hklm\software\Microsoft\Windows\CurrentVersion\Uninstall\ ^| find /I "%*"') do (
    for /f "tokens=1,2,*" %%b in ('reg query "%%a" /v UninstallString ^| find /I "UninstallString"') do (
    if /i %%b==UninstallString (
     echo %%d 
    ) 
) 
) 

该代码会发现从注册表中特定的程序卸载文件,然后将它打印出来,以运行卸载文件所需的命令。当你确定它们是正确的时候,删除'echo'就可以运行这些命令。但是,即使这可能需要使用该程序的卸载GUI。我不认为这会非常低效。除了效率之外,还有其他什么原因希望使用批处理文件吗?

我希望这有助于!

+0

感谢您的回复。我从你的评论中学到了太多东西。 – Erdogan

+0

我很高兴以任何方式帮助你! – iRove