bat指令碼的基本操作

地质狼發表於2024-08-24

一、前提

最近在整理之前的資料資料,僅做記錄

二、概況

ASSOC          顯示或修改副檔名關聯。
ATTRIB         顯示或更改檔案屬性。
BREAK          設定或清除擴充套件式 CTRL+C 檢查。
BCDEDIT        設定啟動資料庫中的屬性以控制啟動載入。
CACLS          顯示或修改檔案的訪問控制列表(ACL)。
CALL           從另一個批處理程式呼叫這一個。
CD             顯示當前目錄的名稱或將其更改。
CHCP           顯示或設定活動內碼表數。
CHDIR          顯示當前目錄的名稱或將其更改。
CHKDSK         檢查磁碟並顯示狀態報告。
CHKNTFS        顯示或修改啟動時間磁碟檢查。
CLS            清除螢幕。
CMD            開啟另一個 Windows 命令解釋程式視窗。
COLOR          設定預設控制檯前景和背景顏色。
COMP           比較兩個或兩套檔案的內容。
COMPACT        顯示或更改 NTFS 分割槽上檔案的壓縮。
CONVERT        將 FAT 卷轉換成 NTFS。你不能轉換
               當前驅動器。
COPY           將至少一個檔案複製到另一個位置。
DATE           顯示或設定日期。
DEL            刪除至少一個檔案。
DIR            顯示一個目錄中的檔案和子目錄。
DISKPART       顯示或配置磁碟分割槽屬性。
DOSKEY         編輯命令列、撤回 Windows 命令並
               建立宏。
DRIVERQUERY    顯示當前裝置驅動程式狀態和屬性。
ECHO           顯示訊息,或將命令回顯開啟或關閉。
ENDLOCAL       結束批檔案中環境更改的本地化。
ERASE          刪除一個或多個檔案。
EXIT           退出 CMD.EXE 程式(命令解釋程式)。
FC             比較兩個檔案或兩個檔案集並顯示
               它們之間的不同。
FIND           在一個或多個檔案中搜尋一個文字字串。
FINDSTR        在多個檔案中搜尋字串。
FOR            為一組檔案中的每個檔案執行一個指定的命令。
FORMAT         格式化磁碟,以便用於 Windows。
FSUTIL         顯示或配置檔案系統屬性。
FTYPE          顯示或修改在副檔名關聯中使用的檔案
               型別。
GOTO           將 Windows 命令解釋程式定向到批處理程式
               中某個帶標籤的行。
GPRESULT       顯示計算機或使用者的組策略資訊。
GRAFTABL       使 Windows 在圖形模式下顯示擴充套件
               字符集。
HELP           提供 Windows 命令的幫助資訊。
ICACLS         顯示、修改、備份或還原檔案和
               目錄的 ACL。
IF             在批處理程式中執行有條件的處理操作。
LABEL          建立、更改或刪除磁碟的卷標。
MD             建立一個目錄。
MKDIR          建立一個目錄。
MKLINK         建立符號連結和硬連結
MODE           配置系統裝置。
MORE           逐屏顯示輸出。
MOVE           將一個或多個檔案從一個目錄移動到另一個
               目錄。
OPENFILES      顯示遠端使用者為了檔案共享而開啟的檔案。
PATH           為可執行檔案顯示或設定搜尋路徑。
PAUSE          暫停批處理檔案的處理並顯示訊息。
POPD           還原透過 PUSHD 儲存的當前目錄的上一個
               值。
PRINT          列印一個文字檔案。
PROMPT         更改 Windows 命令提示。
PUSHD          儲存當前目錄,然後對其進行更改。
RD             刪除目錄。
RECOVER        從損壞的或有缺陷的磁碟中恢復可讀資訊。
REM            記錄批處理檔案或 CONFIG.SYS 中的註釋(批註)。
REN            重新命名檔案。
RENAME         重新命名檔案。
REPLACE        替換檔案。
RMDIR          刪除目錄。
ROBOCOPY       複製檔案和目錄樹的高階實用工具
SET            顯示、設定或刪除 Windows 環境變數。
SETLOCAL       開始本地化批處理檔案中的環境更改。
SC             顯示或配置服務(後臺程序)。
SCHTASKS       安排在一臺計算機上執行命令和程式。
SHIFT          調整批處理檔案中可替換引數的位置。
SHUTDOWN       允許透過本地或遠端方式正確關閉計算機。
SORT           對輸入排序。
START          啟動單獨的視窗以執行指定的程式或命令。
SUBST          將路徑與驅動器號關聯。
SYSTEMINFO     顯示計算機的特定屬性和配置。
TASKLIST       顯示包括服務在內的所有當前執行的任務。
TASKKILL       中止或停止正在執行的程序或應用程式。
TIME           顯示或設定系統時間。
TITLE          設定 CMD.EXE 會話的視窗標題。
TREE           以圖形方式顯示驅動程式或路徑的目錄
               結構。
TYPE           顯示文字檔案的內容。
VER            顯示 Windows 的版本。
VERIFY         告訴 Windows 是否進行驗證,以確保檔案
               正確寫入磁碟。
VOL            顯示磁碟卷標和序列號。
XCOPY          複製檔案和目錄樹。
WMIC           在互動式命令 shell 中顯示 WMI 資訊。

詳細

IF


dir

顯示目錄中的檔案和子目錄列表。

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

  [drive:][path][filename]
              指定要列出的驅動器、目錄和/或檔案。

  /A          顯示具有指定屬性的檔案。
  屬性         D  目錄                R  只讀檔案
               H  隱藏檔案            A  準備存檔的檔案
               S  系統檔案            I  無內容索引檔案
               L  重新分析點          O  離線檔案
               -  表示“否”的字首
  /B          使用空格式(沒有標題資訊或摘要)。
  /C          在檔案大小中顯示千位數分隔符。這是預設值。用 /-C 來
              禁用分隔符顯示。
  /D          跟寬式相同,但檔案是按欄分類列出的。
  /L          用小寫。
  /N          新的長列表格式,其中檔名在最右邊。
  /O          用分類順序列出檔案。
  排列順序     N  按名稱(字母順序)     S  按大小(從小到大)
               E  按副檔名(字母順序)   D  按日期/時間(從先到後)
               G  組目錄優先           -  反轉順序的字首
  /P          在每個資訊螢幕後暫停。
  /Q          顯示檔案所有者。
  /R          顯示檔案的備用資料流。
  /S          顯示指定目錄和所有子目錄中的檔案。
  /T          控制顯示或用來分類的時間字元域
  時間段      C  建立時間
              A  上次訪問時間
              W  上次寫入的時間
  /W          用寬列表格式。
  /X          顯示為非 8dot3 檔名產生的短名稱。格式是 /N 的格式,
              短名稱插在長名稱前面。如果沒有短名稱,在其位置則
              顯示空白。
  /4          以四位數字顯示年份

可以在 DIRCMD 環境變數中預先設定開關。透過新增字首 - (破折號)
來替代預先設定的開關。例如,/-W。

CD

顯示當前目錄名或改變當前目錄。

CHDIR [/D] [drive:][path]
CHDIR [..]
CD [/D] [drive:][path]
CD [..]

  ..   指定要改成父目錄。

鍵入 CD drive: 顯示指定驅動器中的當前目錄。
不帶引數只鍵入 CD,則顯示當前驅動器和目錄。

使用 /D 開關,除了改變驅動器的當前目錄之外,
還可改變當前驅動器。

如果命令擴充套件被啟用,CHDIR 會如下改變:

當前的目錄字串會被轉換成使用磁碟名上的大小寫。所以,
如果磁碟上的大小寫如此,CD C:\TEMP 會將當前目錄設為
C:\Temp。

CHDIR 命令不把空格當作分隔符,因此有可能將目錄名改為一個
帶有空格但不帶有引號的子目錄名。例如:

     cd \winnt\profiles\username\programs\start menu

與下列相同:

     cd "\winnt\profiles\username\programs\start menu"

在擴充套件停用的情況下,你必須鍵入以上命令。

DEL

刪除一個或多個檔案。

DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

  names         指定一個或多個檔案或者目錄列表。
                萬用字元可用來刪除多個檔案。
                如果指定了一個目錄,該目錄中的所
                有檔案都會被刪除。

  /P            刪除每一個檔案之前提示確認。
  /F            強制刪除只讀檔案。
  /S            刪除所有子目錄中的指定的檔案。
  /Q            安靜模式。刪除全域性萬用字元時,不要求確認
  /A            根據屬性選擇要刪除的檔案
  屬性          R  只讀檔案            S  系統檔案
                H  隱藏檔案            A  準備存檔的檔案
                I  無內容索引檔案      L  重新分析點
                O  離線檔案            -  表示“否”的字首

如果命令擴充套件被啟用,DEL 和 ERASE 更改如下:

/S 開關的顯示句法會顛倒,即只顯示已經
刪除的檔案,而不顯示找不到的檔案。

MD

建立目錄。

MKDIR [drive:]path
MD [drive:]path

如果命令擴充套件被啟用,MKDIR 會如下改變:

如果需要,MKDIR 會在路徑中建立中級目錄。例如: 假設 \a 不
存在,那麼:

    mkdir \a\b\c\d

與:

    mkdir \a
    chdir \a
    mkdir b
    chdir b
    mkdir c
    chdir c
    mkdir d

相同。如果擴充套件被停用,則需要鍵入 mkdir \a\b\c\d。

COPY

將一份或多份檔案複製到另一個位置。

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B]
     [+ source [/A | /B] [+ ...]] [destination [/A | /B]]

  source       指定要複製的檔案。
  /A           表示一個 ASCII 文字檔案。
  /B           表示一個二進位檔案。
  /D           允許解密要建立的目標檔案
  destination  為新檔案指定目錄和/或檔名。
  /V           驗證新檔案寫入是否正確。
  /N           複製帶有非 8dot3 名稱的檔案時,
               儘可能使用短檔名。
  /Y           不使用確認是否要覆蓋現有目標檔案
               的提示。
  /-Y          使用確認是否要覆蓋現有目標檔案
               的提示。
  /Z           用可重新啟動模式複製已聯網的檔案。
/L           如果源是符號連結,請將連結複製
               到目標而不是源連結指向的實際檔案。

命令列開關 /Y 可以在 COPYCMD 環境變數中預先設定。
這可能會被命令列上的 /-Y 替代。除非 COPY
命令是在一個批處理指令碼中執行的,預設值應為
在覆蓋時進行提示。

要附加檔案,請為目標指定一個檔案,為源指定
數個檔案(用萬用字元或 file1+file2+file3 格式)。

REN

重新命名檔案。

RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

請注意,你不能為目標檔案指定新的驅動器或路徑。

RD

刪除一個目錄。

RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path

    /S      除目錄本身外,還將刪除指定目錄下的所有子目錄和
            檔案。用於刪除目錄樹。

    /Q      安靜模式,帶 /S 刪除目錄樹時不要求確認

format

格式化磁碟以供 Windows 使用。

FORMAT volume [/FS:file-system] [/V:label] [/Q] [/L[:state]] [/A:size] [/C] [/I:state] [/X] [/P:passes] [/S:state]
FORMAT volume [/V:label] [/Q] [/F:size] [/P:passes]
FORMAT volume [/V:label] [/Q] [/T:tracks /N:sectors] [/P:passes]
FORMAT volume [/V:label] [/Q] [/P:passes]
FORMAT volume [/Q]

  volume          指定驅動器號(後面跟一個冒號)、
                  裝入點或卷名。
  /FS:filesystem  指定檔案系統型別(FAT、FAT32、exFAT、
                  NTFS、UDF、ReFS)。
  /V:label        指定卷標。
  /Q              執行快速格式化。請注意,此開關可替代 /P。
  /C              僅適於 NTFS: 預設情況下,將壓縮在該新建捲上建立的
                  檔案。
  /X              如果必要,請先強制卸除卷。該卷的所有開啟控制代碼
                  不再有效。
  /R:revision     僅 UDF: 強制格式化為特定的 UDF 版本
                  (1.02、1.50、2.00、2.01、2.50)。
                  預設 修訂版為 2.01。
  /D              僅適用於 UDF 2.50: 將複製後設資料。
  /L[:state]      僅適用於 NTFS: 覆蓋檔案記錄的預設大小。
                  預設情況下,非分層卷將使用較小的
                  檔案記錄格式化,分層卷將使用較大的
                  檔案記錄格式化。/L 和 /L:enable 會強制使用較大的檔案記錄
                  格式化,而 /L:disable 會強制使用較小的
                  檔案記錄格式化。
  /A:size         替代預設分配單元大小。強烈建議你在通常情況下使用
                  預設配置。
                  ReFS 支援 4096、64K。
                  NTFS 支援 512、1024、2048、4096、8192、16K、32K、64K、
                  128K、256K、512K、1M、2M。
                  FAT 支援 512、1024、2048、4096、8192、16K、32K、64K,
                  (128K、256K 用於大於 512 個位元組的扇區)。
                  FAT32 支援 512、1024、2048、4096、8192、16K、32K、64K,
                  (128K、256K 用於大於 512 個位元組的扇區)。
                  exFAT 支援 512、1024、2048、4096、8192、16K、32K、64K、
                  128K、256K、512K、1M、2M、4M、8M、16M、32M。

                  請注意,FAT 和 FAT32 檔案系統
                  對捲上的群集數量施加以下限制:

                  FAT: 群集數量 <= 65526
                  FAT32: 65526 < 群集數量 < 4177918

                  如果判定使用的指定群集大小無法
                  滿足以上需求,將立即
                  停止格式化。

                  大於 4096 的分配單元大小
                  不支援 NTFS 壓縮。

  /F:size         指定要格式化的軟盤大小(1.44)
  /T:tracks       為磁碟指定每面磁軌數。
  /N:sectors      指定每條磁軌的扇區數。
  /P:count        將捲上每個扇區清零。此後,該卷將被改寫 "count" 次,
                  且每次使用不同的隨機數。如果 "count" 為零,
                  則每個扇區清零後,不再進行改寫。
                  如果已指定 /Q,則忽略此開關。
  /S:state        指定對短檔名的支援(enable、disable)
                  預設情況下禁用了短名稱
  /TXF:state      指定 txf 已啟用/已禁用(值分別為 enabled 和 disabled)
                   預設情況下,將啟用 TxF
  /I:state        僅 ReFS: 指定是否應在新捲上
                  啟用完整性。"state" 為 "enable" 或 "disable"
                  預設情況下,在支援資料冗餘的儲存上
                  啟用完整性。
  /DAX[:state]    僅適用於 NTFS: 對此卷啟用直接訪問儲存(DAX)
                  模式。在 DAX 模式下,可以透過記憶體匯流排
                  訪問卷,從而大幅提升 IO 效能。僅當硬體
                  支援 DAX 時,才能使用 DAX 模式格式化卷。
                  State 可指定為 "enable" 或 "disable"。/可將 DAX 視
                  為 /DAX:enable。
  /LogSize[:size] 僅適用於 NTFS: 以千位元組為單位指定 NTFS 日誌檔案的大小。
                  最小支援大小為 2MB,因此即使指定的大小
                  小於 2MB,也將產生 2MB 的日誌檔案。零表示
                  通常取決於卷大小的預設值。
  /NoRepairLogs   僅適用於 NTFS: 禁用 NTFS 修復日誌。如果設定此標誌
                  spotfix (即 chkdsk /spotfix)將不起作用。

type

顯示文字檔案的內容。

TYPE [drive:][path]filename

SET

顯示、設定或刪除 cmd.exe 環境變數。

SET [variable=[string]]

  variable  指定環境變數名。
  string    指定要指派給變數的一系列字串。

要顯示當前環境變數,鍵入不帶引數的 SET。

如果命令擴充套件被啟用,SET 會如下改變:

可僅用一個變數啟用 SET 命令,等號或值不顯示所有字首匹配
SET 命令已使用的名稱的所有變數的值。例如:

    SET P

會顯示所有以字母 P 打頭的變數

如果在當前環境中找不到該變數名稱,SET 命令將把 ERRORLEVEL
設定成 1。

SET 命令不允許變數名含有等號。

在 SET 命令中新增了兩個新命令列開關:

    SET /A expression
    SET /P variable=[promptString]

/A 命令列開關指定等號右邊的字串為被評估的數字表示式。該表示式
評估器很簡單並以遞減的優先權順序支援下列操作:

    ()                  - 分組
    ! ~ -               - 一元運算子
    * / %               - 算數運算子
    + -                 - 算數運算子
    << >>               - 邏輯移位
    &                   - 按位“與”
    ^                   - 按位“異”
    |                   - 按位“或”
    = *= /= %= += -=    - 賦值
      &= ^= |= <<= >>=
    ,                   - 表示式分隔符

如果你使用任何邏輯或取餘運算子, 你需要將表示式字串用
引號擴起來。在表示式中的任何非數字字串鍵作為環境變數
名稱,這些環境變數名稱的值已在使用前轉換成數字。如果指定
了一個環境變數名稱,但未在當前環境中定義,那麼值將被定為
零。這使你可以使用環境變數值做計算而不用鍵入那些 % 符號
來得到它們的值。如果 SET /A 在命令指令碼外的命令列執行的,
那麼它顯示該表示式的最後值。該分配的運算子在分配的運算子
左邊需要一個環境變數名稱。除十六進位制有 0x 字首,八進位制
有 0 字首的,數字值為十進位數字。因此,0x12 與 18 和 022
相同。請注意八進位制公式可能很容易搞混: 08 和 09 是無效的數字,
因為 8 和 9 不是有效的八進位制位數。(& )

/P 命令列開關允許將變數數值設成使用者輸入的一行輸入。讀取輸入
行之前,顯示指定的 promptString。promptString 可以是空的。

環境變數替換已如下增強:

    %PATH:str1=str2%

會擴充套件 PATH 環境變數,用 "str2" 代替擴充套件結果中的每個 "str1"。
要有效地從擴充套件結果中刪除所有的 "str1","str2" 可以是空的。
"str1" 可以以星號打頭;在這種情況下,"str1" 會從擴充套件結果的
開始到 str1 剩餘部分第一次出現的地方,都一直保持相配。

也可以為副檔名指定子字串。

    %PATH:~10,5%

會擴充套件 PATH 環境變數,然後只使用在擴充套件結果中從第 11 個(偏
移量 10)字元開始的五個字元。如果沒有指定長度,則採用預設
值,即變數數值的餘數。如果兩個數字(偏移量和長度)都是負數,
使用的數字則是環境變數數值長度加上指定的偏移量或長度。

    %PATH:~-10%

會提取 PATH 變數的最後十個字元。

    %PATH:~0,-2%

會提取 PATH 變數的所有字元,除了最後兩個。

終於新增了延遲環境變數擴充的支援。
該支援總是按預設值被停用,但也可以
透過 CMD.EXE 的 /V 命令列開關而被啟用/停用。請參閱 CMD /?

考慮到讀取一行文字時所遇到的目前擴充的限制時,延遲環境
變數擴充是很有用的,而不是執行的時候。
以下例子
說明直接變數擴充的問題:

 set VAR=before
 if "%VAR%" == "before" (
set VAR=after
 if "%VAR%" == "after" @echo If you see this, it worked )


不會顯示訊息,因為在讀到第一個 IF 語句時,BOTH IF 語句中的 %VAR% 會被代替;
原因是: 它包含 IF 的文體
,IF 是一個複合語句。所以,
複合語句中的 IF 實際上是在比較 "before"
和"after",這兩者永遠不會相等。同樣,以下這個例子
也不會達到預期效果:

 set LIST=
 for% i in (*) do set LIST=%LIST%%i
 echo%LIST%

 原因是,它不會在目前的目錄中建立一個檔案列表,
而只是將LIST 變數設成找到的最後一個檔案。
這也是因為 %LIST% 在
FOR 語句被讀取時,只被擴充了一次;而且,那時的 LIST 變數是空的。
因此,我們真正執行的 FOR 迴圈是:

 for% i in (*) do set LIST= %i

這個迴圈繼續將 LIST 設成找到的最後一個檔案。

延遲環境變數擴充允許你使用一個不同的
字元(驚歎號)在
執行時間擴充環境變數。如果延遲的變數擴充被啟用,
可以將上面例子寫成以下所示,以達到預期效果:

 set VAR=before
if "%VAR%" == "before" (
 set VAR=after
 if "!VAR!" == "after" @echo If you see this, it worked
 )

 set LIST=
 for% i in (*) do set LIST=!LIST! %i
 echo %LIST%

如果命令擴充套件被啟用,有幾個動態環境變數可以被擴充套件,但不會出現在 SET 顯示的變
量列表中。每次變數數值被擴充套件時,這些變數數值都會被動態計算。如果使用者用這些
名稱中任何一個明確定義變數,那個定義會替代下面描述的動態定義:

%CD% - 擴充套件到當前目錄字串。

%DATE% - 用跟 DATE 命令同樣的格式擴充套件到當前日期。

%TIME% - 用跟 TIME 命令同樣的格式擴充套件到當前時間。

%RANDOM% - 擴充套件到 0 和 32767 之間的任意十進位制數字。

%ERRORLEVEL% - 擴充套件到當前 ERRORLEVEL 數值。

%CMDEXTVERSION% - 擴充套件到當前命令處理器擴充套件版本號。

%CMDCMDLINE% - 擴充套件到呼叫命令處理器的原始命令列。

%HIGHESTNUMANODENUMBER% - 擴充套件到此計算機上的最高 NUMA 節點號。

相關文章