DOS 批處理 (二)

DOS 批處理

    • 1. 基礎 DOS 命令
      • 1.1 基礎命令
      • 1.2 文件系統操作
      • 1.3 文件夾管理
      • 1.4 文件管理
      • 1.5 網絡相關
      • 1.6 系統管理
      • 1.7 IF、FOR和NET
        • IF
        • FOR
        • NET

在這里插入圖片描述

1. 基礎 DOS 命令

command /? 查找幫助
  • DOS命令不區分命令字母的大小寫
C:\Users\Administrator>echo 1
1
C:\Users\Administrator>echO 1
1
C:\Users\Administrator>EchO 1
  • 腳本正常執行結束,返回值為0,異常結束,返回值為1或其它數字

1.1 基礎命令

REM 和 ::
ECHO 和 @
PAUSE
ERRORLEVEL
TITLE
COLOR
GOTO 和 :
FIND
START
assoc 和 ftype
pushd 和 popd
CALL
SHIFT
IF
setlocal 與 變量延遲
cls
FOR
  1. REM::指令有點類似我們C語言的注釋,但是有點不同。

    • REM注釋的描述,會在執行bat腳本的時候將描述回顯出來
    • ::注釋的描述,在指令bat腳本時,不會將描述回顯。
    d:\test_bat>type rem.bat
    rem rem line
    :: ::line
    pause
    d:\test_bat>rem.batd:\test_bat>rem rem lined:\test_bat>pause
    請按任意鍵繼續. . .
    
  2. ECHO除了可以打印我們想輸出的文字或者變量值的功能之外,還有一些小功能。

    echo [on/off]:打開/關閉回顯功能
    echo [context]:輸出提示信息
    echo off:關閉DOS提示符的顯示,使屏幕只留下一個下劃線形狀的光標,再輸入echo on即可打開DOS提示符的顯示
    echo.:輸出一個空行,這里的.和echo之間不要有空格,其實除了echo.有這個效果,echo+、echo-、echo*、echo,都可以
    echo [文件內容] > [文件名]:建立新文件
    echo [文件內容] >> [文件名]:新增文件內容
    

    echo前面加@與否。 作用:加@代表不顯示當前行命令自身

    示例:

    G:\WorkSpaceG\yurq\dos>type echo.bat
    rem "echo off"指令關閉回顯
    echo off
    echo "關閉回顯功能的效果"
    echo 床前明月光,
    echo 疑是地上霜,
    echo on
    echo "打開回顯功能的效果"
    echo 舉頭望明月,
    echo 低頭思故鄉.
    echo ---------------分割線-------------
    echo 建立新文件
    :: 在當前路徑下新建文件
    echo "hello" > ./new_file.txt
    echo "繼續增加文件內容,請按enter"&pause > nul
    echo 新增文件內容
    echo "world" >> ./new_file.txt
    pauseG:\WorkSpaceG\yurq\dos>echo.batG:\WorkSpaceG\yurq\dos>rem "echo off"指令關閉回顯G:\WorkSpaceG\yurq\dos>echo off
    "關閉回顯功能的效果"
    床前明月光,
    疑是地上霜,G:\WorkSpaceG\yurq\dos>echo "打開回顯功能的效果"
    "打開回顯功能的效果"G:\WorkSpaceG\yurq\dos>echo 舉頭望明月,
    舉頭望明月,G:\WorkSpaceG\yurq\dos>echo 低頭思故鄉.
    低頭思故鄉.G:\WorkSpaceG\yurq\dos>echo ---------------分割線-------------
    ---------------分割線-------------G:\WorkSpaceG\yurq\dos>echo 建立新文件
    建立新文件G:\WorkSpaceG\yurq\dos>echo "hello"  1>./new_file.txtG:\WorkSpaceG\yurq\dos>echo "繼續增加文件內容,請按enter"  & pause  1>nul
    "繼續增加文件內容,請按enter"G:\WorkSpaceG\yurq\dos>echo 新增文件內容
    新增文件內容G:\WorkSpaceG\yurq\dos>echo "world"  1>>./new_file.txtG:\WorkSpaceG\yurq\dos>pause
    請按任意鍵繼續. . .G:\WorkSpaceG\yurq\dos>type new_file.txt
    "hello"
    "world"
  3. ERRORLEVEL
    ERRORLEVEL指令含義是“程序狀態返回碼”,返回上一條指令執行狀態碼,一般0代表正常1或者其它數字代表錯誤

  4. TITLE
    TITLE指令修改控制臺窗口的標題
    在這里插入圖片描述
    在這里插入圖片描述

  5. color
    設置默認的控制臺前景和背景顏色。

    COLOR [attr]attr        指定控制臺輸出的顏色屬性。
    

    顏色屬性由兩個十六進制數字指定 – 第一個對應于背景,第二個對應于前景。每個數字可以為以下任何值:

        0 = 黑色       8 = 灰色1 = 藍色       9 = 淡藍色2 = 綠色       A = 淡綠色3 = 淺綠色     B = 淡淺綠色4 = 紅色       C = 淡紅色5 = 紫色       D = 淡紫色6 = 黃色       E = 淡黃色7 = 白色       F = 亮白色
    

    在這里插入圖片描述

  6. GOTO 和 :
    GOTO 和 :指令含義就是跳轉的意思,那GOTO跳轉到哪里去呢?這里的GOTO是跳轉到標簽處,這里的標簽就是用:來定義,標簽格式:[name],給標簽取名最好取一些有含義的名字

    D:\test_bat>type goto.bat
    @echo off
    :start
    set /a var +=1
    echo var=%var%
    if %var% leq 4 goto start
    pauseD:\test_bat>goto.bat
    var=1
    var=2
    var=3
    var=4
    var=5
    請按任意鍵繼續. . .
    
  7. FIND
    FIND指令,在文件中搜索字符串

    FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]/V 顯示所有未包含指定字符串的行。/C 僅顯示包含字符串行的次數。/N 顯示行號。/I 搜索字符串時忽略大小寫。/OFF[LINE]:不要跳過具有脫機屬性集的文件。"string":指定要搜索的文本字符串。[drive:][path]filename:指定要搜索的文件
    
    G:\WorkSpaceG\yurq\dos>type echo.bat
    @echo off
    echo "temp.txt文件內容"
    type .\temp.txt
    echo.
    echo "顯示所有未包含指定字符串的行"
    find /v "床" .\temp.txt
    echo ------------分割線--------------
    echo "僅顯示包含字符串的行數"
    find /c "床" .\temp.txt
    echo ------------分割線--------------
    echo "顯示行號"
    find /n "低頭" .\temp.txt
    echo ------------分割線--------------
    echo "搜索字符串時忽略大小寫"
    find /i "hello world" .\temp.txt
    pauseG:\WorkSpaceG\yurq\dos>echo.bat
    "temp.txt文件內容"
    床前明月光,
    疑是地上霜,
    舉頭望明月,
    低頭思故鄉.
    HELLO WORLD
    hello worLD
    "顯示所有未包含指定字符串的行"---------- .\TEMP.TXT
    疑是地上霜,
    舉頭望明月,
    低頭思故鄉.
    HELLO WORLD
    hello worLD
    ------------分割線--------------
    "僅顯示包含字符串的行數"---------- .\TEMP.TXT: 1
    ------------分割線--------------
    "顯示行號"---------- .\TEMP.TXT
    [4]低頭思故鄉.
    ------------分割線--------------
    "搜索字符串時忽略大小寫"---------- .\TEMP.TXT
    HELLO WORLD
    hello worLD
    請按任意鍵繼續. . .
    
  8. start
    START指令,

    • 不帶參數,批處理中調用外部程序命令,該外部程序在新的窗口中運行,批處理程序繼續往下執行,不理會外部程序執行的情況。
    • 使用wait參數,則必須等待外部程序完成后,輸入n才可以繼續執行剩余的指令,輸入y終止當前批處理后面的程序
    echo off
    echo "start"
    :: start .\title.batecho "n"|start  /wait .\title.bat echo "end"D:\test_bat>start.batD:\test_bat>echo off
    "start"
    ^C"end"
    
  9. assoc 和 ftype

    • assoc指令,顯示或設置“文件擴展名”關聯到“文件類型”;比如.txt文件擴展名,代表的是文本文件,執行“assoc .txt”指令,即可看到輸出內容是“.txt=txtfile”,及說明.txt文件擴展名代表著文本文件,再比如“assoc .doc”指令,輸出內容是“.doc=Word.Document.8”,及說明.doc文件擴展名代表著文檔文件
    • ftype指令,顯示或設置“文件類型”關聯到“執行程序與參數”;
    D:\test_bat>@assoc .xlsx
    .xlsx=Excel.Sheet.12D:\test_bat>@assoc .txt
    .txt=txtfileD:\test_bat>assoc .doc
    .doc=Word.Document.8D:\test_bat>ftype txtfile
    txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1
    
  10. pushd 和 popd
    pushd 和 popd指令,切換保存的目錄

    d:\test_bat>pushd d:\test_batd:\test_bat>cd /d c:\c:\>popdd:\test_bat>
    
  11. CALL
    CALL指令可以在批處理執行過程中調用另外一個批處理程序,當另外一個批處理程序執行完后,再繼續執行原本的命令。
    格式:CALL [drive:][path]filename [batch-parameters]

    call與start不同的是call不會另外調用一個新的控制臺窗口來執行調用的批處理腳本

    @echo off
    echo "調用修改控制臺標題腳本"
    call .\example_title.bat
    echo "調用程序執行完畢"
    pause
    

    也可以調用自身腳本中的命令段,相當于調用子程序,但是被調用的命令段以標簽開始,以“goto :eof”結束
    格式:CALL:label arguments

    @echo off
    echo "這里是第一句話"
    call :sub_1
    echo "這里是第三句話"
    echo "這里是第四句話"
    echo "這里是第五句話"
    pause:: --------子程序--------
    :sub_1
    echo "這里是第二句話"
    goto :eofG:\WorkSpaceG\yurq\dos>echo.bat
    "這里是第一句話"
    "這里是第二句話"
    "這里是第三句話"
    "這里是第四句話"
    "這里是第五句話"
    請按任意鍵繼續. . .
    "這里是第二句話"
    

    還是會額外執行子程序的內容

  12. SHIFT
    SHIFT指令更改批處理文件中可替換參數的位置,更改參數位置并不會影響%0和%1。格式:SHIFT [/n]

    G:\WorkSpaceG\yurq\dos>type echo.bat
    @echo off
    ::在當前工作目錄下創建一個臨時文件
    echo "這是一個臨時文件" > temp.txt
    call :sub 1 2 3 4 5 6 7 8
    pause:sub
    echo 第二位參數的值:%~2
    rem 向左移動一位
    shift /1
    echo 第二位參數的值:%~2
    goto :eofG:\WorkSpaceG\yurq\dos>echo.bat
    第二位參數的值:2
    第二位參數的值:3
    請按任意鍵繼續. . .
    第二位參數的值:
    第二位參數的值:
    
  13. setlocal 與 變量延遲
    批處理讀取命令是按行讀取,在處理之前要完成必要的預處理工作,這其中就包括對命令中變量復賦值。我們看個例子來理解變量延遲

    d:\test_bat>type start.bat
    @echo off
    set a=4
    set a=5 & echo %a%
    paused:\test_bat>start.bat
    4
    請按任意鍵繼續. . .
    

    這里我們可以看到輸出的結果是4,這是為什么呢?前面不是說了嗎,批處理讀取命令是按行讀取,在處理之前要完成必要的預處理工作,這其中就包括對命令中變量復賦值,a被我賦值了4,我們下一行不是給a賦值了5嗎,為什么不是5呢,“set a=5 & echo %a%”的意思是:我們打印a的值時與給a賦值5的命令是同時執行的,正因為是同時執行的,所以批處理無法感知變量的動態變化。為了感知動態變化,批處理設計了變量延遲,簡單來說,在讀取一條完整的語句之后,不立即對該行的變量賦值,而會在某個單條語句執行之前再進行賦值,也就是說”延遲“了對變量的賦值。對示例1開啟變量延遲

    d:\test_bat>type start.bat
    @echo off
    setlocal enabledelayedexpansion
    set a=4
    set a=5 & echo !a!
    paused:\test_bat>start.bat
    5
    請按任意鍵繼續. . .
    

    變量延遲的啟動語句是”setlocal enabledelayedexpansion“,并且變量要用一對”!!“將變量括起來,否則就沒有變量延遲的效果

    為什么要用變量延遲?

    d:\test_bat>type start.bat
    @echo off
    ::setlocal enabledelayedexpansion
    for /l %%i in (1, 1, 5) do (set a=%%iecho %a%
    )
    paused:\test_bat>start.bat
    5
    5
    5
    5
    5
    請按任意鍵繼續. . .
    
    d:\test_bat>type start.bat
    @echo off
    setlocal enabledelayedexpansion
    for /l %%i in (1, 1, 5) do (set a=%%iecho !a!
    )
    paused:\test_bat>start.bat
    1
    2
    3
    4
    5
    請按任意鍵繼續. . .
    

1.2 文件系統操作

    vol 	顯示磁盤卷標號label	創建更改或刪除磁盤的卷標

更改卷標

C:\Users\Administrator>cd /d d:/d:\>label soft

1.3 文件夾管理

    cdmd/mkdirrd/rmdirdirtreepath	顯示path的環境變量值XCOPY source [destination]	復制文件和目錄樹

1.4 文件管理

    type	顯示文件內容copy	source [destination] 	將一份或多份文件復制到另一個位置del/erasemoveren/renamereplace	替換文件attrib		顯示或更改文件屬性find		在文件中搜索字符串fc			比較兩個文件或兩個文件集并顯示它們之間的不同
# replace 如果目標目錄沒有此文件,不進行替換
d:\>replace d:\1\123  d:\2
正在替換 D:\2\123# attrib
d:\>attrib /?
顯示或更改文件屬性。ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [+O | -O] [+I | -I] [+X | -X] [+P | -P] [+U | -U][drive:][path][filename] [/S [/D]] [/L]+   設置屬性。-   清除屬性。R   只讀文件屬性。A   存檔文件屬性。S   系統文件屬性。H   隱藏文件屬性。# find
d:\>find "123" 123---------- 123
123# fc
d:\>fc 123 d:\1\123
正在比較文件 123 和 D:\1\123
FC: 找不到差異

1.5 網絡相關

    pingftp	將文件傳送到運行 FTP 服務器服務(經常稱為后臺程序)的計算機以及將文件從該計算機傳出。可以交互使用 Ftpnet	網絡相關telnet	檢測服務器的端口是否開放,telnet www.baidu.com 80ipconfigmsg	將消息發送給用戶arp	顯示和修改地址解析協議(ARP)使用的“IP 到物理”地址轉換表,arp是地址解析協議,其基本功能為透過目標設備的IP地址,查詢目標設備的MAC地址,以保證通信的順利進行。它是IPv4中網絡層必不可少的協議,不過在IPv6中已不再適用,并被鄰居發現協議(NDP)所替代。nslookup  查詢域名對應的IP地址tracert ip/域名	路由追蹤命令
# ftp
FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-A] [-x:sendbuffer] [-r:recvbuffer] [-b:asyncbuffers] [-w:windowsize] [host]-v              禁止顯示遠程服務器響應。-n              禁止在初始連接時自動登錄。-i              關閉多文件傳輸過程中的交互式提示。-d              啟用調試。-g              禁用文件名通配(請參閱 GLOB 命令)-s:filename     指定包含 FTP 命令的文本文件;命令在 FTP 啟動后自動運行。-a              在綁字數據連接時使用所有本地接口。-A              匿名登錄。-x:send sockbuf 覆蓋默認的 SO_SNDBUF 大小 8192-r:recv sockbuf 覆蓋默認的 SO_RCVBUF 大小 8192-b:async count  覆蓋默認的異步計數 3-w:windowsize   覆蓋默認的傳輸緩沖區大小 65535host            指定主機名稱或要連接到的遠程主機的 IP 地址。

1.6 系統管理

    schtasksshutdowntskilltaskkilltasklistscregpowercfg

1.7 IF、FOR和NET

由于這幾個命令比較常用且復雜,所以單獨整理,這幾個命令之間沒有必然聯系。

IF

執行批處理程序中的條件處理。

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename commandNOT               指定只有條件為 false 的情況下,Windows 才應該執行該命令。ERRORLEVEL number 如果最后運行的程序返回一個等于或大于指定數字的退出代碼,指定條件為 true。string1==string2  如果指定的文字字符串匹配,指定條件為 true。EXIST filename    如果指定的文件名存在,指定條件為 true。command           如果符合條件,指定要執行的命令。如果指定的條件為 FALSE,命令后可跟 ELSE 命令,該命令將在 ELSE 關鍵字之后執行該命令。

ELSE 子句必須出現在同一行上的 IF 之后。例如:

    IF EXIST filename. (del filename.) ELSE (echo filename. missing.)

由于 del 命令需要用新的一行終止,因此以下子句不會有效:

IF EXIST filename. del filename. ELSE echo filename. missing

由于 ELSE 命令必須與 IF 命令的尾端在同一行上,以下子句也不會有效:

    IF EXIST filename. del filename.ELSE echo filename. missing

如果都放在同一行上,以下子句有效:

    IF EXIST filename. (del filename.) ELSE echo filename. missing
d:\test_bat>if 1 leq 1 echo 123
123d:\test_bat>if errorlevel 0 echo 321
321d:\test_bat>if exist start.bat echo exist
exist

如果命令擴展被啟用,IF 會如下改變:

    IF [/I] string1 compare-op string2 commandIF CMDEXTVERSION number commandIF DEFINED variable command

其中, compare-op 可以是:

    EQU - 等于NEQ - 不等于LSS - 小于LEQ - 小于或等于GTR - 大于GEQ - 大于或等于

/I開關(如果指定)說明要進行的字符串比較不分大小寫。/I 開關可以用于 IF 的 string1==string2 的形式上。這些比較都是通用的;原因是,如果 string1 和 string2 都是由數字組成的,字符串會被轉換成數字,進行數字比較。

CMDEXTVERSION 條件的作用跟 ERRORLEVEL 的一樣,除了它是在跟與命令擴展有關聯的內部版本號比較。第一個版本是 1。每次對命令擴展有相當大的增強時,版本號會增加一個。命令擴展被停用時,CMDEXTVERSION 條件不是真的。

如果已定義環境變量,DEFINED 條件的作用跟 EXIST 的一樣,除了它取得一個環境變量,返回的結果是 true。

如果沒有名為 ERRORLEVEL 的環境變量,%ERRORLEVEL%會擴充為 ERROLEVEL 當前數值的字符串表達式;否則,你會得到其數值。運行程序后,以下語句說明 ERRORLEVEL 的用法:

    goto answer%ERRORLEVEL%:answer0echo Program had return code 0:answer1echo Program had return code 1

你也可以使用以上的數字比較:

    IF %ERRORLEVEL% LEQ 1 goto okay

如果沒有名為 CMDCMDLINE 的環境變量,%CMDCMDLINE%將在 CMD.EXE 進行任何處理前擴充為傳遞給 CMD.EXE 的原始命令行;否則,你會得到其數值。

如果沒有名為 CMDEXTVERSION 的環境變量,%CMDEXTVERSION% 會擴充為 CMDEXTVERSION 當前數值的字串符表達式;否則,你會得到其數值。

其實筆者整理這篇文章就是因為if 1 echo 1報錯,現在看來確實是語法錯誤

FOR

對一組文件中的每一個文件執行某個特定命令。

  1. 基本格式:
FOR %variable IN (set) DO command [command-parameters]%variable  指定一個單一字母可替換的參數。(set)      指定一個或一組文件。可以使用通配符。command    指定對每個文件執行的命令。command-parameters為特定命令指定參數或命令行開關。在批處理程序中使用 FOR 命令時,指定變量請使用 %%variable而不要用 %variable。變量名稱是區分大小寫的,所以 %i 不同于 %I.

FOR命令有4個參數“/D、/L、/R、/F

  1. FOR參數
  • <1> 參數 /D詳解

定義:FOR /D %variable IN (set) DO command [command-parameters]

如果集中包含通配符,則指定與目錄名匹配,而不與文件名匹配

解析:如果集合(set)包含通配符(“*”和“?”),將對與集合(set)相匹配的每一個目錄(不是指目錄中的文件組)執行指定的Commoand,這個參數主要用于目錄搜索,不會搜索文件

D可以理解為Directory

G:\WorkSpaceG\yurq\dos>type echo.bat
@echo off
echo C盤根目錄下所有目錄名:
for /d %%i in (c:\*) do (echo %%i
)
pause
G:\WorkSpaceG\yurq\dos>echo.bat
C盤根目錄下所有目錄名:
c:\Intel
c:\PerfLogs
c:\Program Files
c:\Program Files (x86)
c:\Python27
c:\Temp
c:\Users
c:\Windows
請按任意鍵繼續. . .
G:\WorkSpaceG\yurq\dos>type echo.bat
@echo off
echo 當前目錄下所有目錄名:
for /d %%i in (%~dp0*) do (echo %%i
)
pause
G:\WorkSpaceG\yurq\dos>echo.bat
當前目錄下所有目錄名:
G:\WorkSpaceG\yurq\dos\123
請按任意鍵繼續. . .
  • <2> 參數 /R詳解

定義:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

檢查以 [drive:]path 為根的目錄樹,指向每個目錄中的 FOR 語句。

如果在 /R 后沒有指定目錄規范,則使用當前目錄。如果集僅為一個單點(.)字符,則枚舉該目錄樹

解析:通過/D參數知道,/D參數能顯示指定路徑或者當前路徑下的目錄名,/R也是跟目錄有關,/R參數可以把指定路徑下或者當前目錄下的文件名全部讀取,注意是文件名,不是目錄名

注意:
1、集合(set)中文件名如果包含通配符(“*”和“?”),則列舉/R參數指定的目錄及其下面的所有子目錄中與集合(set)相符合的所有文件,不相符文件的目錄則不列舉
2、如果集合(set)中為具體文件名,不包含通配符,則枚舉該目錄樹(即枚舉該目錄及其下面的所有子目錄),而不管集合(set)中指定文件是否存在。這與前面所說的單點(.)枚舉目錄樹是一個道理,單點代表當前目錄,也可視為一個文件

G:\WorkSpaceG\yurq\dos>type echo.bat
@echo off
echo 搜索D盤根目錄和子目錄子所有以.bat結尾的文件:
for /r c:\ %%i in (*.bat) do (echo %%i
)
echo --------------------------------------------
echo 搜索當前目錄及其子目錄下所有以.txt結尾的文件:
for /r %%i in (*.txt) do (echo %%i
)
pause
G:\WorkSpaceG\yurq\dos>echo.bat
搜索C盤根目錄和子目錄子所有以.bat結尾的文件:
c:\$WINDOWS.~BT\NewOS\Program Files\WindowsPowerShell\Modules\Pester\3.4.0\Build.bat
c:\$WINDOWS.~BT\NewOS\Program Files\WindowsPowerShell\Modules\Pester\3.4.0\bin\Pester.bat
c:\$WINDOWS.~BT\NewOS\Program Files (x86)\Microsoft\Edge\Application\92.0.902.67\show_third_party_software_licenses.bat
...
@echo off
echo 在C盤中搜索具體文件名為“temp.png”:
for /r c:\ %%i in (temp.png) do (echo %%i
)
pause

備注:如果集合(set)中為具體文件名,不包含通配符,則枚舉該目錄樹(即枚舉該目錄及其下面的所有子目錄),而不管集合(set)中指定文件是否存在。什么意思呢,就是它會搜索C盤中一切可能有“temp.png”文件的路徑,不管“temp.png”存在都會給出一個路徑結果

擴展:你可以將上方腳本修改為下面這種,看是否真的存在

G:\WorkSpaceG\yurq\dos>echo.bat
在C盤中搜索具體文件名為“temp.png”:
請按任意鍵繼續. . .G:\WorkSpaceG\yurq\dos>type echo.bat
@echo off
echo 在C盤中搜索具體文件名為“temp.png”:
for /r c:\ %%i in (temp.png) do (if exist %%i  echo %%i
)
pause
  • <3> 參數 /L詳解

定義:FOR /L %variable IN (start,step,end) DO command [command-parameters]

該集表示以增量形式從開始到結束的一個數字序列。因此,(1,1,5)將產生序列1 2 3 4 5,(5,-1,1)將產生序列(5 4 3 2 1)

解析:使用迭代變量設置起始值(start),然后逐步執行一組范圍值,直到該值超過所設置的終止值(end)。/L參數將通過對起始值與終止值進行比較來執行迭代變量,如果起始值小于終止值,就會執行指定給出的命令,如果迭代變量超過終止值,則命令解釋程序退出循環。可以使用負的步進值(step)以遞減數值的方式來逐步執行此范圍內的值

G:\WorkSpaceG\yurq\dos>type echo.bat
@echo off
echo 正的步進值(step)循環結果:
for /l %%i in (1, 1, 5) do (echo %%i
)
echo --------------------------------------------
echo 負的步進值(step)循環結果:
for /l %%i in (5, -1, 1) do (echo %%i
)
pause
G:\WorkSpaceG\yurq\dos>echo.bat
正的步進值(step)循環結果:
1
2
3
4
5
--------------------------------------------
負的步進值(step)循環結果:
5
4
3
2
1
請按任意鍵繼續. . .

這個參數的for,用起來和其他編程語言的for含義相似

  • <4> 參數 /F詳解
    定義:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]FOR /F ["options"] %variable IN ("string") DO command [command-parameters]FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

或者,如果有 usebackq 選項:

FOR /F ["usebackq options"] %variable IN (file-set) DO command [command-parameters]FOR /F ["usebackq options"] %variable IN ('string') DO command [command-parameters]FOR /F ["usebackq options"] %variable IN (`command`) DO command [command-parameters]

file-set 為一個或多個文件名。繼續到 file-set 中的下一個文件之前,每份文件都被打開、讀取并經過處理。處理包括讀取文件,將其分成一行行的文字,然后將每行解析成零或更多的符號。然后用已找到的符號字符串變量值調用 For 循環。以默認方式,/F 通過每個文件的每一行中分開的第一個空白符號。跳過空白行。你可通過指定可選 “options” 參數替代默認解析操作。這個帶引號的字符串包括一個或多個指定不同解析選項的關鍵字。這些關鍵字為:

eol=c - 指一個行注釋字符的結尾(就一個)skip=n - 指在文件開始時忽略的行數。delims=xxx - 指分隔符集。這個替換了空格和制表符的默認分隔符集。tokens=x,y 或 m-n   - 指每行的哪一個符號被傳遞到每個迭代的 for 本身。這會導致額外變量名稱的分配。m-n格式為一個范圍。通過 nth 符號指定 mth。如果符號字符串中的最后一個字符星號,那么額外的變量將在最后一個符號解析之后usebackq        - 指定新語法已在下類情況中使用:在作為命令執行一個后引號的字符串并且一個單引號字符為文字字符串命令并允許在 file-set中使用雙引號擴起文件名稱。

注意:tokens= 一行指定最多 26 個符號,只要不試圖聲明一個高于字母 “z” 或"Z" 的變量。請記住,FOR 變量是單一字母、分大小寫和全局的變量;而且,不能同時使用超過 52 個

G:\WorkSpaceG\yurq\dos>type echo.bat
@echo off
rem 創建測試文件
echo ;注釋行,臨時文件用完刪除 > .\test.txt
echo 111213141516>> .\test.txt
echo 21段,22段,23段,24段,25段,26段 >> .\test.txt
echo 31段-32段-33段-34段-35段-36段 >> .\test.txt
echo 第一句話 > .\temp.txt
echo 第二句話 >> .\temp.txt
echo 第三句話 >> .\temp.txt
echo hello;world >> .\temp.txt
echo -------------------------------------------------------------
echo /F參數解析文件內容:
for /f "eol=; tokens=1,3* delims=,- " %%i in (.\test.txt) do (echo %%i %%j %%k
)
echo -------------------------------------------------------------
echo /F參數解析字符串:
for /f "tokens=1,2,3 delims=,-;" %%i in ("hello,world-window;bat") do (echo 第一列字符串:%%i;第二列字符串:%%j;第三列字符串:%%k
)
echo -------------------------------------------------------------
echo temp.txt文件內容:
type .\temp.txt
echo -------------------------------------------------------------
echo /F參數解析命令:
rem 結果輸出只顯示最左側的“hello”,因為tokens沒有設置,所以只顯示第一列
for /f "skip=3 delims=; " %%i in ('type .\temp.txt') do (echo %%i
)
pause
del .\test.txt & del .\temp.txt
G:\WorkSpaceG\yurq\dos>echo.bat
-------------------------------------------------------------
/F參數解析文件內容:
1113141516212324段,25段,26段
313334段-35段-36段
-------------------------------------------------------------
/F參數解析字符串:
第一列字符串:hello;第二列字符串:world;第三列字符串:window
-------------------------------------------------------------
temp.txt文件內容:
第一句話
第二句話
第三句話
hello;world
-------------------------------------------------------------
/F參數解析命令:
hello
請按任意鍵繼續. . .

解析
“eol=c”指定單個字符作為注釋行的開頭;
“skip=n”指定忽略前n行;
“delims=xxx”指定分隔符,將內容按照指定分隔符進行分割;
“tokens=x,y,m-n”指定分割后的內容將按照“x,y,m-n”列顯示內容(比如“tokens=1,2,3”顯示分割后的第一列、第二列、第三列內容;而“tokens=1,3*”顯示分割后的第一列、第三列、第三列后的內容當作一列內容)

“usebackq options”

對于帶有空格的文件名,你需要用雙引號將文件名括起來。為了用這種方式來使用雙引號,還需要使用 usebackq 選項,否則,雙引號會被理解成是用作定義某個要分析的字符串。
即被雙引號括起來的字符串,此選項都認為是文件名
單引號括起來為“字符串”

G:\WorkSpaceG\yurq\dos>type echo.bat
@echo off
rem 創建測試文件
echo ;注釋行,臨時文件用完刪除 > .\test.txt
echo 111213141516>> .\test.txt
echo 21段,22段,23段,24段,25段,26段 >> .\test.txt
echo 31段-32段-33段-34段-35段-36段 >> .\test.txt
echo 第一句話 > .\temp.txt
echo 第二句話 >> .\temp.txt
echo 第三句話 >> .\temp.txt
echo hello;world >> .\temp.txt
echo -------------------------------------------------------------
echo /F參數解析文件內容:
for /f "usebackq eol=; tokens=1,3* delims=,- " %%i in (.\test.txt) do (echo %%i %%j %%k
)
echo -------------------------------------------------------------
echo /F參數解析字符串:
for /f "usebackq tokens=1,2,3 delims=,-;" %%i in ('hello,world-window;bat') do (echo 第一列字符串:%%i;第二列字符串:%%j;第三列字符串:%%k
)
echo -------------------------------------------------------------
echo temp.txt文件內容:
type .\temp.txt
echo -------------------------------------------------------------
echo /F參數解析命令:
for /f "usebackq skip=3 delims=; " %%i in (`type .\temp.txt`) do (echo %%i
)
pause
del .\test.txt & del .\temp.txt
G:\WorkSpaceG\yurq\dos>echo.bat
-------------------------------------------------------------
/F參數解析文件內容:
1113141516212324段,25段,26段
313334段-35段-36段
-------------------------------------------------------------
/F參數解析字符串:
第一列字符串:hello world;第二列字符串:window bat;第三列字符串:
-------------------------------------------------------------
temp.txt文件內容:
第一句話
第二句話
第三句話
hello;world
-------------------------------------------------------------
/F參數解析命令:
hello
請按任意鍵繼續. . .
  1. FOR命令中的變量
變量(I)說明
%~I刪除任何引號("),擴展 %I,刪除引號規則為:無頭不刪,有頭連尾刪
%~fI將 %I 擴展到一個完全合格的路徑名
%~dI僅將 %I 擴展到一個驅動器號
%~pI僅將 %I 擴展到一個路徑
%~nI 僅將 %I 擴展到一個文件名
%~xI僅將 %I 擴展到一個文件擴展名
%~sI擴展的路徑只含有短名
%~aI將 %I 擴展到文件的文件屬性
%~tI將 %I 擴展到文件的日期/時間
%~zI 將 %I 擴展到文件的大小
%~$PATH:I查找列在路徑環境變量的目錄,并將 %I 擴展到找到的第一個完全合格的名稱。如果環境變量名未被定義,或者沒有找到文件,此組合鍵會擴展到空字符串

另外,還可以組合修飾符來得到多重結果:

變量(I)說明
%~dpI僅將 %I 擴展到一個驅動器號和路徑
%~nxI僅將 %I 擴展到一個文件名和擴展名
%~fsI僅將 %I 擴展到一個帶有短名的完整路徑名
%~dp$PATH:I搜索列在路徑環境變量的目錄,并將 %I 擴展到找到的第一個驅動器號和路徑。
%~ftzaI將 %I 擴展到類似輸出線路的 DIR
NET

顯示所有用戶賬號(net user)
添加用戶賬戶(net user username /add)
刪除指定用戶賬戶(net user username /delete)
激活或禁用指定賬戶(net user username /active:yes/no)
查詢賬戶相關的安全信息(net accounts)

查詢共享資源(net view、net file、net share)

  • 局域網內共享的計算機——net view
  • 查詢遠端計算機正在占用的共享文件——net file
  • 查詢、管理共享文件夾——net share,例如
    • 我要設置e盤為共享文件夾,可以執行命令【net share e=e:\】,其中第一個e代表了共享文件夾的名稱,而e:\代表的是共享文件夾的目錄路徑。
    • 刪除共享文件夾的設定,【net share D:\D-desktop\test5 /delete

服務管理(net start、net stop、Net Pause、Net Continue)

  • 查詢已經開啟了哪些服務——net start,執行沒有參數的命令【net start】,可以查看當前已經開啟的服務。這些服務也可在服務管理器查看,在運行窗口或cmd窗口中執行命令【services.msc】,可以看到所有服務。
  • 暫停某項服務——net stop xxx,假如說我們想暫停上面的第一項服務,可以執行命令【net stop "ABBYY FineReader 15 Licensing Service"】成功暫停。
  • 啟動某項服務——net start xxx,當我們想要啟動那個被我們終止的ABBYY服務時,可以用命令【net start "ABBYY FineReader 15 Licensing Service"】。

賬號信息(net user、net localgroup)

  • net user命令用于添加或更改用于賬號或顯示用戶賬號信息。此命令也可以寫為“net users”,格式【net user[username [password | *] [options] ] [/domain]】,username 用于添加、刪除、更改或查看用戶的賬號名
    C:\Users\Administrator>net user gtt gtt123 /add
    命令成功完成。
    C:\Users\Administrator>net user gtt /delete
    命令成功完成。
    
  • net localgroup此命令和net user命令配合使用,用于添加用戶,提升用戶為管理員。 在滲透測試中,提權是要掌握的基本知識。【net localgroup groupname {/add [/comment:"text"] | /delete} [/domain]

計算機連接情況(net use)
“Net USE”命令用于查看連接的計算機,斷開計算機與共享資源的連接,或者顯示計算機的連接信息,【net use [devicename | *] [ computernamesharename[volume]] [password | *]] [/user :[domainname] username] [[/delete] | [/persistent:{yes | no}]]

“devicename”"用于指定要連接的資源名稱或要斷開的設備名稱。
“computernamesharename” 表示服務器及共享資源的名稱。
'password” 表示訪問共享資源的密碼。
“/user”用于指定進行連接的另外一個用戶。
*domainname” 用于指定另一個域。
username ”用于指定登錄的用戶名。
“/home”用于將用戶連接到其宿主目錄。
“/delete"用于取消指定的網絡連接。
“/persistent"用于控制永久網絡連接的使用。
net use * /delete /Y
net use gtt gtt123 /user:\\192.168.2.151\abc

同步時間
net time此命令用于查看系統時間,使計算機的時鐘與另一臺計算機或域的時鐘同步,命令格式如下。

net time [computername  | /domain [:name]] [/set]

“computername” 表示要檢查或同步的服務器名。
“/domain[:name]”用于指定要與其時間同步的域。
“/set"用于使本計算機時鐘與指定計算機或域的時鐘同步。

會話管理
net session 命令用于列出或斷開本地計算機與之連接的客戶端的會話,也可寫為 net sessions net sess
命令格式 net session [computername] [/delete]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212178.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212178.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212178.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于SSM框架的倉庫管理系統

基于SSM框架的倉庫管理系統 文章目錄 基于SSM框架的倉庫管理系統 一.引言二.系統設計三.技術架構四.功能實現五.界面展示六.源碼獲取 一.引言 現代商業環境中&#xff0c;倉庫管理對于企業的運營效率和客戶滿意度至關重要。傳統的手工管理方式已經無法滿足日益復雜的倉儲需求。…

【Spring】SpringBoot日志

SpringBoot日志 日志概述日志使用打印日志獲取日志對象使用日志對象打印日志日志框架介紹門面模式SLF4J框架介紹(simple logging facade for java) 日志格式說明日志級別日志級別的分類日志級別的使用 日志配置配置日志級別日志持久化配置日志文件的路徑和文件名配置日志文件的…

【刷題篇】動態規劃(六)

文章目錄 1、最大子數組和2、環形子數組的最大和3、乘積最大子數組4、乘積為正數的最長子數組長度5、 等差數列劃分6、最長湍流子數組 1、最大子數組和 給你一個整數數組 nums &#xff0c;請你找出一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&…

【Unity動畫】Avatar Mask

創建 Avatar Mask可以設置那一部分骨骼運動和不運動 然后放在狀態機里面的層中來混合 【后續完善】

深入探索 Rust 宏編程

Rust 宏提供了一種強大的方法來編寫抽象和重用代碼,它們在 Rust 編程中扮演著重要的角色。本文將深入探索 Rust 宏的概念、類型、使用方法以及如何實現自定義宏,以提供一個全面的 Rust 宏編程指南。 Rust 宏簡介 宏是 Rust 中的一種元編程工具,它們在編譯時運行,用于生成…

linux安裝node

文章目錄 安裝node 安裝node 一次手操記錄 - 首先安裝wget yum install -y wget - 下載nodejs最新的tar包 wget https://cdn.npm.taobao.org/dist/node/v12.12.0/node-v12.12.0-linux-x64.tar.xz - 解壓包 tar -xvf node-v12.12.0-linux-x64.tar.xz - 部署bin文件 先確認你no…

30 張圖解 HTTP 常見的面試題

前言 在面試過程中&#xff0c;HTTP 被提問的概率還是比較高的 我搜集了 5 大類 HTTP 面試常問的題目&#xff0c;同時這 5 大類題跟 HTTP 的發展和演變關聯性是比較大的&#xff0c;通過問答 圖解的形式由淺入深的方式幫助大家進一步的學習和理解 HTTP 協議。 HTTP 基本概…

第四節JavaScript 條件語句、循環語句、break與continue語句

一、JavaScript條件語句 在通常的代碼中&#xff0c;我們有一些需要決定執行不同動作&#xff0c;這就可以在代碼中使用條件語句來完成。 下面是我們常使用的條件語句&#xff1a; if語句&#xff1a;只有當指定條件是true時&#xff0c;執行條件內代碼。if…else語句&#…

JavaScript數組的長度

JavaScript數組的長度可以通過數組對象的length屬性來獲取&#xff0c;長度表示數組中元素的數量。 代碼示例&#xff1a; let arr []; // 定義一個空數組 console.log(arr.length); // 輸出 0arr.push(1); // 給數組添加元素 arr.push(2); arr.push(3); console.log(arr.le…

項目二 創建與操作學生管理數據庫

項目二 創建與操作學生管理數據庫 #目標 創建庫&#xff1b;查看庫&#xff1b;操作庫&#xff1b;圖形工具操作庫1&#xff0c;創建學生管理數據庫 #創建數據庫 CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collat…

44.0/認識前端

44.1 目錄 44.1.1 網頁 44.1.1.1 網頁的組成 44.1.1.2 網頁的分類 44.1.2 網站 44.1.2.1 網站的分類 44.1.3 主頁 44.2. Internet、IP 地址和域名 44.2.1 Internet 44.2.2 IP 44.2.3 域名 44.3. Web 前端技術概述 44.3.1 html5 44.3.2 CSS3 44.3.3 Javascript …

hbuiler中使用npm安裝datav

注&#xff1a;datav邊框樣式目前使用時&#xff1a;適用于網頁&#xff0c;不適用于app 1、先安裝node 安裝、配置Node路徑 2、為Node配置環境變量 3、在hbuilder的設置中填寫node的路徑 配置 4、打開cmd輸入npm install jiaminghi/data-view 安裝dataV&#xff0c;&…

當初為什么選擇計算機-希望一直干下去

還記得當初自己為什么選擇計算機&#xff1f; 當初你問我為什么選擇計算機&#xff0c;我笑著回答&#xff1a;“因為我夢想成為神奇的碼農&#xff01;我想像編織魔法一樣編寫程序&#xff0c;創造出炫酷的虛擬世界&#xff01;”誰知道&#xff0c;我剛入門的那天&#xff0…

.360勒索病毒數據恢復|金蝶、用友、管家婆、OA、速達、ERP等軟件數據庫恢復

尊敬的讀者&#xff1a; 在數字時代&#xff0c;.360勒索病毒如同數字的幽靈&#xff0c;悄無聲息地侵入用戶的數字領域&#xff0c;將珍貴的數據文件變為數字的囚牢。本文將介紹.360勒索病毒的特征&#xff0c;提供解密和數據恢復的方法&#xff0c;并分享有效的預防措施&…

【PID學習筆記 9 】控制系統的分析方法之二

寫在前面 前文重點介紹時域分析法、本文將繼續學習控制系統的另外幾種分析方法&#xff0c;包括根軌跡法、頻率分析法、狀態空間分析法。再次強調&#xff0c;在這里只是做了一個系統化的概述&#xff0c;目的是讓學習PID&#xff0c;特別是用PID的工程人員有一個對基礎知識的…

【開源】基于JAVA語言的數字化社區網格管理系統

項目編號&#xff1a; S 042 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S042&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S042&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊三、開發背景四、系統展示五、核心源碼5…

SELinux零知識學習三十八、SELinux策略語言之約束(2)

接前一篇文章:SELinux零知識學習三十七、SELinux策略語言之約束(1) 四、SELinux策略語言之約束 SELinux對策略允許的訪問提供了更嚴格的約束機制,不管策略的allow規則如何。 SELinux有兩種類型的約束: constrain語句constrain語句是最常見的約束,使得可以基于用戶、角色…

3.DevEco Studio安裝鴻蒙手機app本地模擬器

配合Intel CPU啟動模擬器 解決措施 打開任務管理器&#xff0c;在“性能”選項&#xff0c;檢查CPU虛擬化是否已經啟用。如果未啟用&#xff0c;需要進入電腦的BIOS中&#xff0c;將CPU的“Intel Virtualization Technology”選項開啟。 點擊New Emulator 文檔中心 解決措施…

鐵路通信鐵塔監測方案

目錄 1.監測的背景及意義 1.1監測背景 1.2監測意義 2.系統介紹及特點 2.1系統介紹 2.2系統特點 3.系統設計 3.1監測內容 3.2總體介紹 3.3詳細設計 3.3.1垂直度監測 3.3.2水平位移、沉降監測 3.3.3環境監測 3.3.4應力應變監測 3.3.5裂縫監測 3.3.6云平臺綜合在線…

VBA技術資料MF93:將多個Excel表插入PowerPoint不同位置

我給VBA的定義&#xff1a;VBA是個人小型自動化處理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高數據的準確度。我的教程一共九套&#xff0c;分為初級、中級、高級三大部分。是對VBA的系統講解&#xff0c;從簡單的入門&#xff0c;到…