2016-05-31 72 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