dos-基礎用法

VoidCm發表於2023-12-22

DOS(磁碟作業系統)是一個早期的基於命令列的作業系統,儘管現代作業系統已經發展為圖形使用者介面(GUI),但是瞭解和掌握一些基本的DOS命令仍然非常有用,尤其是在處理批處理指令碼、網路管理或者在沒有圖形介面的情況下。

下面是一些主要的DOS命令和相應的實用案例:

  1. CD (Change Directory): 改變當前目錄。

    • 例項:cd \foldername 切換到根目錄下的 foldername 資料夾。

    • 例項:進入指定磁碟機代號的指定路徑

      cd /d D:\LearningNote\DOS
      
    • 獲取當前目錄

      C:\Users\Cmy>cd
      C:\Users\Cmy
      C:\Users\Cmy>echo %cd% 
      C:\Users\Cmy
      
  2. DIR (Directory): 顯示當前目錄的內容。

    • 例項:只顯示檔名

      dir /b
      
  3. MD (Make Directory): 建立新的目錄。

    • 例項:建立一個子目錄

      md child
      
    • 例項:建立多個子目錄

      md child child1 child2
      
    • 例項:建立巢狀目錄結構

      md parent\child1\child2
      
    • 例項:建立帶有空格的目錄

      md "my folder"
      
  4. RD (Remove Directory): 刪除指定的目錄。

    • 例項:刪除指定的目錄

      rd newFolder
      
    • 例項:刪除多個目錄

      rd folder folder1 folder2
      
    • 例項:刪除非空目錄

      使用 /s 引數列示遞迴地刪除目錄及其所有子目錄和檔案;使用 /q 引數列示靜默刪除,不顯示確認提示

      rd /s newFolder
      rd /s /q parent
      
  5. DEL (Delete): 刪除指定的檔案。

    • 例項:del filename.txt 刪除名為 filename.txt 的檔案。

    • 例項:刪除特定型別的檔案

      del *.txt
      
    • 例項:遞迴刪除目錄中的所有檔案

      del /s parent\*
      
    • 例項:刪除前確認

      del /p file_name
      
  6. TYPE: 顯示指定檔案的內容。

    • 例項:type file.txt 顯示 file.txt 檔案的內容。

    • 例項:將檔案重新寫入到其他檔案

      type file.txt > file2.txt
      
    • 例項:將檔案追加到其他檔案

      type file.txt >> file.txt
      
    • 例項:透過管道符號|傳遞給其他命令

      type file.txt|findstr base
      
  7. 管道符:|在DOS(命令提示符)環境下,管道 (|) 符號用於將一個命令的輸出傳遞給另一個命令作為輸入。這種技術允許你建立複雜的命令鏈來處理文字資料

    • find

      #直接用法
      find "search_str" file.txt
      #配合管道符
      type file.txt|find "search_str"
      
    • findstr

      #直接用法
      findstr search_str file.txt
      type file.txt|findstr search_str
      
    • 鏈式用法

      dir | find "data.txt" | find "modified"
      
  8. COPY: 複製檔案或目錄。

    • 例項:copy file.txt newfile.txtfile.txt 複製為 newfile.txt

    • 合併多個檔案

      copy 1.txt+2.txt result.txt
      
    • 跨磁碟機代號複製

      copy 1.txt E:\aaaa.txt
      
  9. REN (Rename) 或 RENAME: 重新命名檔案或目錄。

    • 例項:ren oldname.txt newname.txtoldname.txt 重新命名為 newname.txt
  10. ATTRIB: 修改檔案或目錄的屬性。

    • 例項:attrib +h file.txtfile.txt 新增隱藏屬性。
  11. PATH: 設定或顯示當前路徑環境變數。

    • 例項:path path1;path2 設定當前路徑包含 path1path2
  12. ECHO: 列印文字到螢幕或重定向到檔案。

    • 例項:echo Hello, World! > output.txt 將 "Hello, World!" 寫入 output.txt可以用來建立檔案
    • 例項: echo append >> output.txtj將"append"追加(另起一行)到output.txt
  13. SET:設定變數或者環境變數

    1. 設定變數和引用,注意,等號(=)兩邊不能有空格。

      @echo off
      set h=HelloWorld 
      echo %h% 
      
    2. 顯示所有變數和顯示特定變了

      #顯示所有變數
      set
      #顯示特定變數
      set JAVA_HOME
      
    3. set /a允許你執行簡單的算術運算並將結果賦值給變數

      set /a sum=1+2
      
    4. set /p選項可以讓使用者互動式地輸入值

      @echo off
      set /p var="please input your name:"
      echo hello %var% ! Welcome!
      
  14. exiterrorlevel

    exit命令用於退出當前的命令直譯器或者關閉當前的命令視窗。

    # 立即退出命令列或批處理指令碼
    exit
    # 退出並設定退出程式碼 ErrorLevel 如果在批處理指令碼中使用,/b選項表示退出當前的批處理指令碼,而不是整個命令直譯器
    exit [/b] [exitCode]
    

    errorlevel 是一個系統變數,用於儲存上一條命令執行後的退出程式碼或錯誤級別。通常,0 表示成功,非零值表示有錯誤或特定的失敗條件。

    REM 設定errorlevel為1
    command1
    exit /b 1
    
    REM 設定errorlevel為0(表示成功)
    command2
    exit /b 0
    
  15. IF: 條件判斷語句,用於編寫複雜的批處理指令碼。

    例項:

    @echo off 
    rem 關閉回顯
    if exist file.txt (
      echo File exists.
    ) else (
      echo File not found.
    )
    
    • 等於(EQU) 和 ==等價 但是優先使用EQU

      if %var% EQU "value"(
      	echo the variable is equals to the value;
      )
      
    • 不等於(NEQ)

      if 1 NEQ 1 (
      	echo 1 is not equal to 1
      ) else (
      	echo 1 is equal to 1
      )
      
    • 小於(LSS)

      if 2 LSS 1 (
      	echo 2 is less than 1
      ) else (
      	echo 1 is less than 2
      )
      
    • 小於或者等於(LEQ)

      if 1 LEQ 2 (
      	echo 1 is less or equal to 2
      ) else (
      	echo 2 is less or equal to 1
      )
      
    • 大於(GTR)

      if 1 GTR 2 (
      	echo 1 is greater than 2
      ) else (
      	echo 2 is greater than 1
      )
      
    • 大於或者等於(GEQ)

      if 1 GEQ 2 (
      	echo 1 is greater or equal to 2
      ) else (
      	echo 2 is greater or equal to 1
      )
      
    • NOT 取非 注意和!不等價

      @echo
      set var=true
      if NOT %var%==true echo the var is not true
      
      • NOT 和 !的辨析

        !符號在批處理指令碼中有特殊用途,它通常與setlocal enableDelayedExpansion命令一起使用來實現延遲環境變數擴充套件。當使用!時,你是在引用一個延遲擴充套件變數,其值在執行時而不是定義時進行評估。例如:

        @echo off
        setlocal EnableDelayedExpansion
        set var=hello
        echo Before loop: !var!
        for /L %%i in (1,1,3) do (
           set var=world
           echo Inside loop: !var!
        )
        echo After loop: !var!
        

        在這個例子中,!var!用於訪問延遲擴充套件變數var的值。

    • AND (使用 && 符號表示):

      if condition1 && condition2 command
      
    • OR(使用 || 符號表示):

      if condition1 || condition2 command
      

    FOR: 迴圈執行一系列命令。

    格式:FOR [引數] %%變數名 IN (相關檔案或命令)   DO 執行的命令  
      作用:對一個或一組檔案,字串或命令結果中的每一個物件執行特定命令,達到我們想要的結果。  
      注意:在批處理檔案中使用 FOR 命令時,指定變數請使用 %%variable,而不要用 %variable。變數名稱是區分大小寫的,所以 %i 不同於 %I.  
      關於:for命令可以帶引數或不帶引數,帶引數時支援以下引數:/d /l /r /f  
    
    • 例項:這個迴圈會列印當前目錄下所有 .txt 檔案的內容。

      for %%i in (*.txt) do type %%i
      
    • 例項: (%var%)中的空格和英文逗號製表符視為分隔符

      @echo off
      set /p var="please input a var:"
      for %%i in (%var%) do (
      	echo %%i
      ) 
      
    • 引數 /d引數只能顯示當前目錄下的目錄名字,只會搜尋指定目錄下的目錄,不會搜尋再下一級的目錄

      @echo off
      for /d %%i in (c:\*) do echo %%i  --顯示c盤根目錄下的所有目錄
      for /d %%i in (???) do echo %%i  --顯示當前目錄下名字只有1-3個字母的目錄
      
    • 引數/r搜尋指定路徑及所有子目錄中與set相符合的所有檔案

      for /r c:\ %%i in (*.exe) do echo %%i --把C盤根目錄,和每個目錄的子目錄下面全部的EXE檔案都列出來了
      
    • 引數/l

      ---  
        格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]  
        該集表示以增量形式從開始到結束的一個數字序列。可以使用負的 Step  
        for /l %%i in (1,1,5) do @echo %%i  --輸出1 2 3 4 5  
        for /l %%i in (1,2,10) do @echo %%i  --輸出1,3,5,7,9   
        for /l %%i in (100,-20,1) do @echo %%i  --輸出100,80,60,40,20  
      
    • 引數/f 主要用於處理文字檔案或者命令的輸出

      # delims=xxx 設定分隔符,預設分隔符是空格和製表符。你可以指定一個或多個字元作為分隔符,例如 delims=,; 表示使用逗號和分號作為分隔符。
      @echo off
      for /f "delims==" %%i in (file.txt) do (
      	echo %%i 
      )
      讀取檔案並列印每一行
      
      # tokens=x,y,m-n:指定要提取的欄位或範圍。例如,tokens=1,2 表示提取第一和第二個欄位,tokens=2* 表示提取第二個欄位及之後的所有欄位。
      @echo off
      for /f "tokens=2,3 delims=," %%i in (data.txt) do (
      	echo %%i %%j
      ) 
      讀取檔案每行的第二三列,以,為分割符
      
      # skip=n:跳過前n行不處理。
      @echo off
      for /f "skip=2 delims=" %%i in (data.txt) do (
      	echo %%i 
      )
      
      # eol=xxx:指定行尾標記,當遇到這些字元時,認為該行結束。忽略(隱藏、遮蔽)開頭字元是xxx的行。
      @echo off
      for /f "eol=C" %%i in (data.txt) do echo %%i
      
      # usebackq:允許使用引號 (") 或反引號 (``) 包圍檔名或命令。
      @echo off
      FOR /F "usebackq" %%a IN (`dir /b`) DO echo %%a
      @echo off
      FOR /F "tokens=2,* delims=:" %%a IN ('ipconfig ^| findstr /R ",*IPv4,*"') DO echo IP-Address:%%a
      # 注意ipconfig ^|中的^是跳脫字元 |是管道符
      
  16. GOTO: 轉移到批處理指令碼中標籤所定義的位置。

    goto命令用於跳轉到指令碼中的特定標籤(label),然後從該標籤處繼續執行。

    • 例項:
      @echo off
      
      REM 第一部分
      :first_part
      echo This is the first part of the script.
      pause
      
      REM 使用goto命令跳轉到第二部分
      goto second_part
      
      REM 這是永遠不會被執行的程式碼,因為我們將跳轉到second_part標籤
      echo This code will never be executed.
      
      :second_part
      echo This is the second part of the script.
      
      set /p flag="input 1 to return fisrt_part"
      if flag equ 1(
      	goto first_part
      )
      exit /b 0
      
  17. PAUSE: 暫停批處理指令碼的執行,並顯示提示資訊。

    • 例項:pause 在執行完批處理指令碼後暫停並等待使用者按鍵。
  18. timeout:timeout命令用於暫停指令碼的執行並等待指定的時間

    timeout [/t timeout] [/nobreak] [/quiet]
    /t timeout:指定等待的時間(以秒為單位)。例如,/t 10表示等待10秒。
    /nobreak:預設情況下,使用者可以透過按下任意鍵來提前結束等待。使用/nobreak選項可以禁止這種行為,使得指令碼必須等待指定的時間。
    timeout /t 10 /nobreak 
    
    @echo off
    setlocal enabledelayedexpansion
    
    # 沒1秒列印一次 列印10s
    set count=0
    :start
    echo Hello
    set /a count+=1
    if !count! equ 10 exit
    timeout /t 1 > nul
    goto start
    

相關文章