- 1 創建用戶
net user $username $password /add
net user testuser1 ttg/*-123 /add
net user testuser1 /delete
2 指定用戶組中追加/刪除 用戶
net LocalGroup username /add
net localgroup Administrators testuser1 /add
net localgroup Administrators testuser1 /delete
3 創建共享目錄
net share 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:~ 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 特殊字符
【& 】
連接多個命令
【&&】
連接多個命令,從前往後一次執行並判斷是否執行出錯,若出錯則不再繼續執行
【||】
類似於高級語言中的或,從前往後,有一個命令成功執行,則退出