
[已結帖]探討一種比較簡潔高效的批處理解決方案(求助)最后由 angelbd 于 -11-20 19:47有這樣一種需求,我想在同一個批處理中實現兩個功能,一是在全部磁盤中查找有無某一特定文件,假設為a.exe,其路徑一般是固定的,其安裝程序默認的安裝路徑嘛,比如是 x:abcabc1000,其中x為盤符未定,客戶可能選擇安裝到當前幾個磁盤分區中的任何一個,我個人認為磁盤分區一般不可能超過8個(含光驅盤符),即c-j(c、d、e、f、g、h、i、j),如果查到在某磁盤分區下有該a.exe,則從當前目錄中向該目錄是復制幾個exe文件,另一個是要對復制到上一步中的其個文件比如b.exe創建到桌面快捷方式比如叫b.url(至少保證這個)和在當前系統登錄用戶或者干脆對all users的開始-所有程序-軟件目錄文件夾-程序快捷方式b.url.由于自己對批處理熟悉和掌握遠遠不夠,對使用 for 和 if 組合非常頭痛,只好使用個人的笨辦法,那就是不厭其煩地使用語句羅列,我對第一項的解決思路是使用 if exist x:abcabc1000a.exe@copy*.exe x:abcabc1000, X取值從C到H,自己只好寫上8條該語句,在這種情況下自己還有不解之處,我想本語句實現復制、刪除和跳轉三功能,所以用if exist x:abcabc1000a.exe@copy*.exe x:abcabc1000/y>nul && @del/f /s /qx:abcabc1000bb.exe >nul&& goto:ext, 不過這樣寫好像和我預想的結果完全不同,自己也不能找出錯誤所在。 對第二個自己則是從網上找一段語句,按照自己實際內容和條件適當修改和調整后,自己試驗后也未能達到目的,挺郁悶的,特放到論壇中請前輩高手施予援手,熱心指點一下在下為盼,這里先謝謝了,由于自己在論壇上屬初來乍到,沒有PB幣或積分相贈,只好來日用自己的努力和付出為論壇做出貢獻了。附:自己曾經嘗試多次未果的語句附上。1、實現第一個要求:查找目錄文件所在磁盤目錄并復制,setlocal enabledelayedexpansion::打開變量延遲,因為下面在for循環內有自定義變量for %%i in (c d e f g h) do (::設置循環遍歷所有磁盤cd /d %%i:::逐個進入到每個磁盤for /f delims= %%a in ('dir /a-d/b/s a.exe') do (::用dir命令列出所有的a.exe文件,并將結果用for循環/f處理echo%%a ::顯示出查到的文件地址----這時不想輸出顯示set lug=%%~dpa::將找到的文件所在的路徑賦值到變量lug,后面你可以用他了。echo y|copy*.exe!lug!&&goto :ext))::復制a.exe 到查到文件所在目錄,加echo y是為了覆蓋目標個人覺得這段語句效率不太高,實際情況是沒必要掃描全部目錄,如上所述,目錄是相對特定的,區別只是磁盤盤符不同罷了。再有自己想實現靜默安裝,不想輸出任何屏幕顯示。在語句前簡單加@ 及在語句后定向輸出>nul ,似乎都有問題或報錯。2、為實現第二個目的,創建桌面快捷方式,沒考慮做開始-程序上程序快捷方式,未替換成自己的實際路徑與文件@chrome.exe@cd /d %~dp0set path=%userprofile%桌面ChromePluschrome.exeset topath=%USERPROFILE%桌面chrome.urlecho [InternetShortcut] >> %topath%echo URL=%path% >> %topath%echo IconIndex=0 >> %topath%echo IconFile=%path% >> %topath%這段沒搞清,必須先執行欲創建快捷方式的該程序才能取得相對路徑?如何實現創建開始-程序上的程序快捷方式,自己也找到一段VBS代碼,感覺按自己的思路將之整合到一塊著實不太輕松,也覺得有些龐大了,真誠希望能夠得到論壇中眾高手熱情幫助和指教為盼!

