iThome online | iThome Blog | iThome周刊訂閱

載入中...

kim29292729

IT邦初學者
10級

如何寫出判斷的批次檔
標籤:windows

@echo off
setlocal
set PATHTOFIXES=\\192.168.2.205\it\Update_i386

%PATHTOFIXES%\WindowsServer2003-KB914961-SP2-x86-ENU.exe /Z /M
上面是一段批次檔的語法,但是我想在
%PATHTOFIXES%\WindowsServer2003-KB914961-SP2-x86-ENU.exe /Z /M
這一段加一個判斷,因為我要做出安裝過的話就不要去執行。通常這個檔裝過會在
windows的資料夾下產生一個文字檔例如 KB956841.log 這樣子的檔名,不知道有沒有大大知道該怎麼寫,我想過是用IF但怎麼判斷卻想不出來,請大大指導一下謝謝

請問這位高手,那如果我想要寫一個批次檔是刪掉資料夾且裡面有資料,但我要刪的名稱是有「$」開頭的資料夾,這樣子有辦法做到嗎?

2008-11-15 22:00:29 補充



收到書籤:發佈到twitter      
解決時間:2008-11-29 18:15:01
發問時間:2008-11-15 18:14:47

▼ ADVERTISEMENT ▼

最佳解答(網友推薦)
19
iT邦守護神

回答:misadm ( IT邦好手9級 )

時間:2008-11-15 21:44:54

你可以使用下列判斷方式:

@echo off
setlocal
set PATHTOFIXES=\\192.168.2.205\it\Update_i386
if not exist %windir%\KB956841.log (%PATHTOFIXES%\WindowsServer2003-KB914961-SP2-x86-ENU.exe /Z /M) else (echo 已安裝過此程式)


第 4 行的意思是說,在 Windows 的安裝目錄下(%windir% 是系統環境變數) 若不存在KB956841.log這個檔案,則會執行第一個括號內的指令。

反之,當檔案已存在時則會執行else後面括號內的指令。當判斷式成立時,你若不只要執行一個指令時,則可將第 4 行改寫成:
if not exist %windir%\KB956841.log (
     %PATHTOFIXES%\WindowsServer2003-KB914961-SP2-x86-ENU.exe /Z /M
     echo 安裝完成!!請重新開機
) else (
     echo 已安裝過此程式)

要特別注意括號的位置,例如else前後的括號。

舉例供你參考,若有疑問可以再討論。

2008-11-17 09:08:45補充
要刪除含有資料的資料夾只要下一個指令即可:



rd $1234567890 /S /Q



/S : 除了目錄本身之外,一併移除指定目錄裡的所有目錄和檔案。

/Q : 安靜模式,有使用 /S 時,刪除目錄樹結構不再要求確認
如何寫出判斷的批次檔
回答:pankt( IT邦初學者8級 )
時間:2008-11-17 02:02:17
***回答已移除***
回答:pankt( IT邦初學者8級 )
時間:2008-11-17 02:32:31
8
這樣寫會更容易理解
@echo off
setlocal
set PATHTOFIXES=\\192.168.2.205\it\Update_i386
If EXIST %windows%\KB956841.log goto JUMPA
%PATHTOFIXES%\WindowsServer2003-KB914961-SP2-x86-ENU.exe /Z /M
goto END
:JUMPA
:END

假如 %windows%\KB956841.log windows目錄下存在 KB956841.log 這個檔案的話,就跳到 :JUMPA 這行
也就是,如果它找不到KB956841.log 這個檔案,就執行下行,即 執行
%PATHTOFIXES%\WindowsServer2003-KB914961-SP2-x86-ENU.exe /Z /M

第二個問題:想要寫一個批次檔是刪掉資料夾且裡面有資料,但要刪的名稱是有「$」開頭的資料夾

要刪目錄,先要清空目錄裡的檔案(以前DOS有工具,可以直接刪掉目錄),可能無法單存的用批次檔來完成,主要是DOS命令或批次檔無法過濾出只有目錄名稱的文字檔,它會包含有目錄裡的其他資訊。縱使可以,也無法循序的讀一行處理一行。

首先先建一個含有 $開頭的資料夾的文字檔
DIR $*.* | FIND "$" > A1.txt
這個命令是將目錄中含有$子目錄的目錄,經由 FIND 過濾器,只將含有$字元目錄送到新建的A1.TXT 檔案裡面。
說明:
> 代表新建一個檔案
>> 代表附加到一個檔案
| 是 鍵盤 \上面那個記號,是管道的意思
打開 A1.TXT 你會發現只要目錄開頭含有$的目錄,均會被過濾出來,但是裡面也涵蓋了其他資料。
問題在這裡,我們要刪除目錄裡的全部檔案及拆掉目錄,目錄均不能用$*.* 來表示,也就是說 DEL $*.*\*.* 這個命令不會被執行,DEL $*.* 則會DEL $*.* 這些檔案,而非這些目錄。
如果寫一隻小程式,處理 A1.TXT 讓它只剩下含$的目錄名稱如A2.txt
接下來,再由隻種程式,以循序檔方式讀取A2.TXT,產生一個目錄一句批次檔命令
DEL $XX1 /s/Q
RD $XX1 /S/Q

DEL $XX2/s/Q
RD $XX1/S/Q

如果 $XX1目錄裡面還有子目錄, /S/Q DEL仍可刪除 /S/Q RD仍可拆除
@echo off
setlocal
set PATHTOFIXES=\\192.168.2.205\it\Update_i386
If EXIST %windows%\KB956841.log goto JUMPA
%PATHTOFIXES%\WindowsServer2003-KB914961-SP2-x86-ENU.exe /Z /M
:JUMPA
這樣就可以了!! XD2008-11-17 02:41:21 補充

回應

請填寫您的回應,長度限為1,000個字,回應不計點數,也不限使用次數



 

檢舉違規

違規事項:

*補充檢舉理由(可省略),字數不可超過100字

推薦

推薦理由:


*給回答者的鼓勵(可不填),字數不可超過100字

▼ ADVERTISEMENT ▼

熱門標籤

 ccna代考   cisco   crystal   exchange   iscsi   it   java   javascript   linux   m-power   mail   msnlib   msnp15   msnsdk   msn機器人   mysql   nas   oracle   outlook   pmi   pmp   report   sap   server   smartquery   sql   vista   vpn   web   windows   xp   二三事   倍力   倍力資訊   免費軟體   國際專案管理師   報表   專案管理   有話大聲說   活動   省錢   網路   網路儲存   網路管理   網頁設計   資安   資訊安全   防毒軟體   2003   2008