[Windows] Batch Language

  • Batch Language
  • 或許有很多人認為Batch Language是原始人才用的語言,但是事實上許多windows管理員還是利用著Batch來完成許多事情,畢竟Batch裡面還是有許多不錯用的功能。在這一篇裡我會介紹一些筆者自己常用的範例。

  • Backup My Favorites
  • 平常要備份Favorites總要打開好幾層的資料夾然後複製到自己要存放的地方,這樣的工作如果一直重複做就變得很厭煩。這時我們就可以使用Batch Langauge來幫我們完成。

    將以下文字存成bakFav.bat檔

    rem. #### Backup My Faviorites ###############

    XCOPY "%USERPROFILE%\Favorites" "D:\backup\Favorites" /S /D /H

    rem. #################################

    這裡我們使用了XCOPY這個指令幫我們把profile底下的Favorites複製到我們指令的備份路徑,如果路徑不存在他會詢問你要不要建立。其中後面接著參數分別代表如下:

    /S: 備份目錄資料夾底所有子目錄及檔案

    /D: 差異備份

    /H: 備份隱藏跟系統檔

    至於我們為什麼要使用%USERPROFILE%而不使用C:\Document ans Settings\##@%@#的原因是因為如果只絕對路徑哪這個batch檔就無法通用了。

    另外常用的相對路徑指令如下:

    %temp% :C:\Documents and Settings\user\Local Settings\Temp

    %systemroot% :C:\WINDOWS

    %programfiles% :C:\Program Files

    光是這樣你可能還是會嫌每次還要點擊bakFav.bat是一件苦差事,如果我一下子要備份好多東西,那豈不是常常都要點這些batch file,你可以把這些batch file放在啟動(附屬應用程式>>啟動)裡或者使用使用排程(控制台>>工作排程)來幫我們每日備份或者其他時間備份。

  • Clean Files
  • 清除檔案的工作也可以交給Batch來做,尤其是要清除一些讓人覺得很厭煩的垃圾檔案,

    將以下的文字存檔成clean.bat

    rem. ####### Clean Files ###########
    @echo off
    IF "%1" =="" goto NONCMD

    del /F /Q /A %1:\*.sqm
    del /F /Q /A %1:\autoruns.inf
    goto :END

    :NONCMD
    set /p label=Enter a Drive Label:

    del /F /Q /A %label%:\*.sqm
    del /F /Q /A %label%:\autoruns.inf
    goto :END

    :END
    echo.Clean Completed!

    @echo on
    rem. ###############################

    上面就是一個比較標準的batch file範例,一開始跟結尾用了echo off/on只是要設定將中間的處理過程不要將所有的狀態都寫是在command line底下而已,其實你也可以不用這樣設定。

    %1對應著第一個參數,如果你在cmd底下這樣輸入clean c,那clean對應到%0,而c對應到%1,依此類推就會有%2,%3,%4......。

    IF內的比較運算還有(equ,neq,lss,leq,gtr,geq),通常我們都會搭配著goto來使用,要注意的是,如果我們要跳到END,那END的片段宣告必須是:END是要加上:這個符號的。

    del所接著參數解釋如下:

    /F:強制刪除唯獨檔

    /Q:寧靜模式

    /A:刪除系統檔,隱藏檔,唯獨檔等類型

    經由del刪除後是直接刪除,所以讀者在使用這些參數及del實務必要小心。

    多數人都懶得從cmd底下去執行batch file,所以在前面的指令我就先判斷使用者是否有接參數,如果沒有的話就要跳出提示視窗讓使用者輸入drive label,這部份就是由set /p label=Enter a Drive Label:來處理,這樣的功能也是可以適用在cmd底下的。

    你可以增加更多清除的項目,讓這個clean.bat更加完善。

  • List All Directories
  • rem.========== List All Dirs ===============

    dir /s /on /b /a:d > dir.txt
    FOR /F %%v IN (dir.txt) DO dir %%v > %%v/list.txt

    rem. ================================

    上面兩行指令可以讓每個子目錄下都建議一個目錄資料夾清單(list.txt).

    Batch Lauguage基本常用的就先介紹到這裡,更詳細的訊息你可以參考下面的網頁:

    MS-DOS/MSDOS Batch Files: Batch File Tutorial and Reference:

    DOS BATCH FILE TUTORIAL

No comments:

Post a Comment

Orange - data analysis tool

Installation pip install orange3 Run orange python -m Orange.canvas