批處理命令小結(一)

- 1 創建用戶

net user $username $password /add
net user testuser1 ttg/*-123 /add
net user testuser1 /delete
  • 2 指定用戶組中追加/刪除 用戶

    net LocalGroup groupname username /add

net localgroup Administrators testuser1 /add
net localgroup Administrators testuser1 /delete
  • 3 創建共享目錄

    net share sharefoldername= sharefolderpath /grant:everyone,full

net share share1=c:\output /grant:everyone,full
  • 4 指定管理員用戶執行某命令

local:

PsExec.exe -u $AdministratorName -p $password -accepteula -nobanner cmd /c $commandstr

Remote:

CmdKey /Add:$RemoteServerIP /User:$RemoteServerIP\$UserName /Pass:$Password
psExec.exe $RemoteServerIP -accepteula -nobanner cmd /c $commandstr
psExec.exe $RemoteServerIP -accepteula -nobanner cmd /c call $batfilepath
CmdKey /Delete:$RemoteServerIP

注:在遠程server上指定已存在的bat文件,要使用call調用,不然指定bat執行完畢後,會退出,後續命令不會被指定

  • 5 將指定文件拷貝到遠程Serve上並執行
    CmdKey /Add:$RemoteServerIP /User:$RemoteServerIP\$UserName /Pass:$Password
    psExec.exe $RemoteServerIP -accepteula -nobanner workpath -c $filePaht $Parameter
    CmdKey /Delete:$RemoteServerIP
  • 6 文件夾刪除
    rd /s /q $floderpath
  • 7 共有文件夾刪除
    net share $ShareFolderName /delete /y
    rd /s /q  $ShareFolderPath
  • 8 bat文件退出碼設置
    exit /b $code
  • 9 判斷文件/文件夾是否存在
    if [not] exist "$path" ()
  • 10 輸出重定向

    >$outputfile 2>&1

    注:不是所有命令的輸出可以重定向的。某些命令可能進行過特殊處理,可以在控制檯顯相關信息,但是不支持重定向

  • 11 按行讀取文集

    for /f “delims=” in ($filepath) do()
    注:不設置”delims=”的場合,會默認以空格進行分割

  • 12 按照索引截取字符串

    set str=”aabbccdd”
    %str:~startindex, len%

    截取最後5個字符
    %str:~-5%

    截取第一個到倒數第6個字符
    %str:~0, -5%

    注:index從0開始

  • 13 指定分隔符對字符串進行分割

    for /f "tokens=$colindex1,$colindex2,$startcol-$endcol delims=$delimschar1$delimschar2$delimscharN " %%i in ("$string") do ()
    for /f "tokens=$colindex1,$colindex2,$startcol-$endcol delims=$delimschar1$delimschar2$delimscharN " %%i in ($file) do ()
    for /f "tokens=$colindex1,$colindex2,$startcol-$endcol delims=$delimschar1$delimschar2$delimscharN " %%i in ('$cmdstr') do ()
tokens:指定分割後,要提取的列,提取的列爲多列時,可通過%%j, %%k來取得對應列的值
delims:指定分隔符
  • 14 字符串比較

    if [not] a == b

  • 15 數值比較

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

  • 16 模擬sleep

    ping -n 3 127.1>nul

    注:等待時間不準確,受環境因素影響

  • 17 遍歷文件夾

    遍歷指定文件夾下的所有文件

    for /r "E:\74127047" %%s in (*) do echo %%s
遍歷指定文件夾下的所有文件夾
    for /r "E:\74127047" %%s in (.) do echo %%s
遍歷指定文件夾下的所有文件夾以及文件
    for /r "E:\74127047" %%s in (.,*) do echo %%s
  • 18 拷貝文件到指定目錄
    echo F |xcopy $SrcFile $DestFloder /Y /k
  • 19 延遲環境變量擴展
setlocal ENABLEDELAYEDEXPANSION
"set a=4
set a=5
echo !a!"
在for循環中
setlocal enabledelayedexpansion

FOR /F ""tokens=1-3 delims=/ "" %%i IN ('date /t') DO (
SET TODAY=%%i%%j%%k
SET TODAY_FOLDER=!TODAY:~2!
echo !TODAY! !TODAY_FOLDER!
)"
注:若不設置延遲環境變量擴展,在for循環中set是無效的
還可以通過在啓動cmd時指定/v參數,來開啓延遲環境變量擴展
  • 20 模擬數組
setlocal ENABLEDELAYEDEXPANSION

for /l %%i in (0,1,2) do (
 set array[%%i]=%%i
 echo array[%%i]=!array[%%i]!
)

set count=3
set index=0
:StartLoop
if !index! EQU !count! goto BreakLoop
echo array[!index!]=!array[%index%]!
Set /a index=!index!+1
set array2[!index!]=!index!
echo array2[!index!]=!array2[%index%]!
goto StartLoop
:BreakLoop"

注:
在for循環中操作, !array[%index%]!會一直識別爲第一個

  • 21 環境變量的作用域

    (1)在a.bat中call b.bat,在b.bat中可以使用利用a.bat中的環境變量
    (2)在a.bat中call b.bat,若希望b.bat中設置的環境變量能在a.bat中利用,在b.bat中不能設置延遲環境變量擴展
    (3)a.bat中通過psexec調用b.bat,在b.bat中只能利用系統的環境變量和b中的自定義環境變量

  • 22 for循環命令

    基本格式: for /{d/l/r/f} %%變量 in (集) do 命令
    注:在命令行中直接使用時,變量前是一個百分號
    /d:僅操作文件夾
    FOR /D %%variable IN (set) DO command
    例1: 輸出指定目錄下的所有文件夾
    for /d %%a in (c:\users*.*) do echo %%a
    例2:輸出當前目錄下文件夾名爲1-3個字符的目錄
    for /d %%i in (window?) do @echo %%i
    /r 遞歸
    FOR /R [[drive:]path] %%variable IN (set) DO command
    path不指定的場合,操作目錄爲命令執行的目錄及其子目錄
    例1: 在當前目錄及子目錄中創建內容爲abc的abc.txt文件
    for /r . %%a in (abc.txt) do echo abc>abc.txt
    例2:刪除例1中創建的文件
    for /r . %a in (*.txt) do del /q %a
    /L:迭代數值範圍
    for /L %% Variable in (Start#,Step#,End#) do Command
    例1:打印1-5
    for /l %%a in (1,1,5) echo %%a
    /f:解析文件內容/字符串/命令的輸出
    FOR /F [“options”] %%i IN (file) DO command
    FOR /F [“options”] %%i IN (“string”) DO command
    FOR /F [“options”] %%i IN (‘command’) DO command
    例1:輸出CSV文件前三列的內容

    for /f "tokens=1-3 delims=," %%a in (csvformat.csv) do echo %%a %%b %%c

    例2:輸出字符串中key的值

    for /f "tokens=2 delims==" %%a in ("key=values") do echo %%a

    例3:輸出本機IPv4 IP

    for /f "delims=" %%a in ('ipconfig /all ^|findstr IPv4') do echo %%a

    注:命令的場合,特殊字符是需要轉義的

  • 23 啓動/停止service

    net stop service名
    net start service名

  • 24 bat或exe的調用

    bat或exe的處理不瞭解的場合,建議使用call來調用,這樣bat/exe退出後,會返回到調用文件繼續後續的處理。
    直接調用的場合,若bat或exe中使用了exit(),則退直接退出當前執行的批處理,後續處理中斷。

  • 25 cmd命令的參數

    /C
    命令執行完了,窗口關閉
    /K
    命令執行完了,窗口保持
    /A
    內部命令的輸出結果以ANSI 輸出到管道或文件
    /U
    內部命令的輸出結果以Unicode輸出到管道或文件

  • 26 start命令

    “START [“”タイトル”“] [/D パス] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/NODE <NUMA ノード>] [/AFFINITY <16 進數の関係マスク>] [/WAIT] [/B] [コマンド/プログラム] [パラメーター]”
    /D
    執行路徑
    /I
    新的環境中執行,當前執行環境的信息不傳遞到新的環境中
    /MIN
    窗口最小化
    /MAX
    窗口最大化

  • 27 find命令

    FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] “文字列” [[ドライブ:][パス]ファイル名[…]]
    /V
    反向查找,查找不含有指定字符串的行
    /C
    表示包含指定字符的行數
    /N
    顯示行號
    /I
    檢索式不區分大小寫

  • 28 findstr命令

    “FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
    [/F:ファイル] [/C:文字列] [/G:ファイル] [/D:ディレクトリ一覧]
    [/A:色屬性] [/OFF[LINE]] 文字列 [[ドライブ:][パス]ファイル名[ …]]”

    /B
    在行首檢索
    /E
    在行尾檢索
    /L
    檢索文字列被識別爲普通字符串
    /R
    檢索文字列被識別爲正則表達式
    /S
    檢索指定的目錄以及子目錄
    /I
    檢索時不區分大小寫
    /X
    輸出完全一致的行
    /V
    只輸出不一致的行
    /N
    輸出行號
    /M
    含有一致行時,只輸出文件名
    /O
    輸出一致行的偏移量offset
    /P
    跳過含有不可打印字符的文件
    /F 文件
    從文件獲取要檢索的文件一覽
    /C:文字列
    將文字列作爲一個整體進行檢索
    注:不使用/C的場合,會以空格爲分隔符,含有其中一個就匹配
    /G 文件
    從指定文件中獲取要檢索的字符串
    /D 路徑
    指定要檢索的目錄
    [ドライブ:][パス]ファイル名
    要檢索的文件

  • 29 批處理的參數

    0%
    批處理文件自身
    %1~%9
    批處理參數

  • 30 特殊字符

    【& 】
    連接多個命令
    【&&】
    連接多個命令,從前往後一次執行並判斷是否執行出錯,若出錯則不再繼續執行
    【||】
    類似於高級語言中的或,從前往後,有一個命令成功執行,則退出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章