2011-07-21 15 views
29

我目前正在編寫一個執行安裝文件的批處理文件。在運行安裝文件之前,我檢查目錄是否存在以避免重新安裝應用程序。如果不存在 - CMD命令 - 不工作

我通過使用If Not Exists filename語句來完成此操作。如果安裝的文件不存在,則執行安裝文件。

出於某種原因,當我用已經安裝它的應用程序測試它時,它仍然試圖通過它重新安裝應用程序。

這裏是我的代碼片段:

cd "C:\Documents and Settings\John\Start Menu\Programs\" 
pause 
If NOT exist "Software Folder"\ (
start \\filer\repo\lab\"software"\"myapp"\setup.exe 
pause 
) 

哪裏SoftwareFolder爲我檢查,看它是否在我的Programs文件夾中存在的"C:\Documents and Settings\John\Start Menu\Programs\".子目錄。

我知道我的start命令沒有任何問題。我有一種感覺,我的開始CD命令或其參數有問題。

非常感謝!

回答

39

在您的If Not Exist代碼中使用該文件夾的完整路徑。然後,你甚至不會有CD了:

If Not Exist "C:\Documents and Settings\John\Start Menu\Programs\SoftWareFolder\" 
+0

我已經嘗試的,但它也不能正常工作。 – Johnrad

+1

我曾試過,也沒有工作。但是,當我做 如果不存在C:\「文件和設置」\約翰\「開始菜單」\程序\「軟件文件夾」\ – Johnrad

+0

它的工作!所以謝謝 :) – Johnrad

3

我注意到這個有些問題,可能是有用的人剛剛開始,還是一個有些缺乏經驗的用戶,就知道了。首先...

CD /D "C:\Documents and Settings\%username%\Start Menu\Programs\" 

兩件事情之一是,CD後/ d可能被證明是在確保該目錄變更有用的,但它是不是真的有必要,第二,如果你打算從這個傳遞用戶到用戶你必須添加代碼,而不是你的名字,代碼%username%,這使得代碼可以在任何計算機上使用,只要他們的setup.exe文件在你的計算機上的相同位置。當然要確保這一點更加困難。 還...

start \\filer\repo\lab\"software"\"myapp"\setup.exe 

這裏的起始碼,可以建立這樣,但正確的語法是

start "\\filter\repo\lab\software\myapp\" setup.exe 

這將運行:SETUP.EXE,位於:\過濾器\回購\實驗室...等\

0

正如在Escobar Ceaser的答案中,我建議圍繞整個路徑使用報價。這是將整個路徑封裝在「」中的常用方式,不僅是路徑中的單獨目錄名稱。

我有一個類似的問題,它不適合我。但是,在路徑中爲單獨的目錄名稱使用「」是沒有選擇的,因爲路徑包含環境變量,這些變量涵蓋了多個目錄層次結構。得出的結論是,我錯過了收「和(

正確的版本,與支架前的空格之間的空間,將

If NOT exist "C:\Documents and Settings\John\Start Menu\Programs\Software Folder" (
start "\\filer\repo\lab\software\myapp\setup.exe" 
pause 
)