本文轉貼自PTT
台灣最大的本土社群網站
分享這篇文章到Facebook、Google+或噗浪!


 作者  newclicker (Newclicker)                                   看板  EZsoft 
 標題  Re: 4、批次語法取得隨身碟代號                                          
 時間  Mon Jan 14 12:27:42 2013                                               
───────────────────────────────────────

※ 引述《mlev (大地彩妝師)》之銘言:
: 想要寫個批次檔將檔案備份到隨身碟
: 但隨身碟代號會因插在不同電腦而不同
: 因此想求問
: 有什麼方法可以取得隨身碟代號呢?

首先在你的隨身碟上面建立一個檔案 例如 usbdsk.flg

這樣在不同電腦間就不用煩惱隨身碟代號會不同

這邊為了方便modified各種功能,利用三個批次檔達成


AutoSearch.bat用來自動搜尋windows所有可能的磁碟機代號
checku.bat    用來確認是否存在usbdsk.flg這個檔案,並將隨身碟代號變數設為%upan%
func1.bat     執行你要的功能

寫完你要的func1.bat,
以後只要執行Autosearch.bat就可以完成你要的備份或其他功能

AutoSearch.bat

@echo off
for %%i in (z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c) do call
checku.bat %%i
rem (以上從 for 到 %%i 為同一行)
rem 用來自動搜尋windows所有可能的磁碟機代號


checku.bat

@echo off
set upan=
if not exist %1:\usbdsk.flg goto ext >nul 2>nul
set upan=%1
func1.bat
:ext
rem 用來確認是否存在usbdsk.flg這個檔案
rem 並將隨身碟代號變數設為%upan%


func1.bat (內容為你要的功能,例如把C:\temp 備份到隨身碟:\temp)

@echo off
rem 執行你要的功能
copy c:\temp %upan%:\temp\

--
網  要帥 有車|████   █████████▕搜尋進階搜尋 | 使用偏好
                                                     ▇▇   ̄ ̄ ̄ ̄    ̄ ̄ ̄ ̄
           搜尋: ☉所有男生 ○歪國人 ○宅宅 ○台灣男生
 所有網頁         約有 1項符合要帥 有車的查詢結果,以下是第 1項。  共費0.01秒
 您是不是要找: 象棋                                             φtaipingeric  

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.34.163.231
※ 編輯: newclicker      來自: 1.34.163.231         (01/14 12:47)
→ ThisIsNotKFC:高手!                                             01/14 12:59
推 chinoyan:為什麼不寫成一個BAT檔,要分三個                         01/14 19:58
→ CP64:可讀性比較高吧                                             01/14 20:18
→ bestpika:bat 不是在寫程式啊XD                                   01/14 21:11
推 CP64:就算是script也是要顧及到維護吧030                          01/14 22:44
板友果然內行,就是因為是寫批次檔,所以要注意降低維護的門檻
(目標就是要讓不會寫程式的使用者都能夠輕易修改)
通通寫在一個檔案裡面,goto來goto去的,個人不太喜歡
就算寫出能夠彰顯自己功力,但卻讓大家難以修改/客製化的程式
這樣的程式碼等於一出生就宣告死亡,因為除了作者之外不會有人想幫忙改版
還不如寫出能讓小學生能看得懂並能簡單修改的程式碼更讓人覺得有成就感

之所以分成這三個檔案代表最常需要客製化的三個環節

AutoSearch.bat大致上沒有修改的必要(如果要加上軟碟機,那就把a,b加上去)

checku.bat單獨出來,這樣使用者如果希望把usbdsk.flg改成其他五花八門的名字,
          就只要修改這個檔案就好。

          另外更進階的用法是,利用不同的名字,可以做到不同隨身碟之間的備份與同步
          而不會受到換了別台電腦就搞不清楚哪一個磁碟是來源,哪一個磁碟是目的
          ex.來源隨身碟就放個uSource.flg,目的隨身碟就放個uBackup.flg
             來源硬碟1 就放個h1Sourc.flg,來源硬碟2 就放個h2Sourc.flg

func1.bat
func2.bat
......... 這樣子分的原因是考慮到後續工作可簡單可複雜,比如說有同步檔案需求的話
          前後步驟就會有其依存性關聯,同一個檔案內goto來來去去
          再加上多重來源多重目的之間的備份和同步,絕對會讓想修改的人翻桌
          再來如果考慮到可以搭配開放源碼的FreeFileSync命令列功能(好用),
          這樣子分開寫不但清楚,備份、比對、同步功能也就可以好好發揮。

當然我不認為我的解法就是最好的,有其他構想的人自然是很歡迎一起討論。
※ newclicker:轉錄至看板 EzHotKey                                  01/15 03:20
※ 編輯: newclicker      來自: 1.34.163.231         (01/15 14:26)
推 s25g5d4:%~d0 不就能取得了嗎                                     01/16 00:51
→ s25g5d4:建立一個.bat 裡面寫echo %~d0看看 應該會回傳D:           01/16 00:51
→ s25g5d4:輸入%~dp0可以取得整個資料夾路徑                         01/16 00:52
→ s25g5d4http://tinyurl.com/qlzauj 參考資料                     01/16 00:53
推 CP64:他現在主要是解決隨身碟在不同電腦可能有不同代號的問題啊@@   01/16 10:43
→ s25g5d4:你批次檔總會放到隨身碟裡吧 直接從隨身碟裡執行批次檔     01/16 23:32
→ s25g5d4:去取得%0就能取得批次檔路徑阿....                        01/16 23:32
推 CP64:恩很好 我都一直把這當作一定要放在電腦上的XDD               01/17 00:11
→ CP64:忘了也可以丟隨身碟理XDDD                                   01/17 00:11


----本文使用PCMAN+BBI轉貼----


※ 新版PCMAN開放測試中,新增功能:    



用PCMAN+BBI連回PTT原文