1. 程式人生 > >批處理命令解析

批處理命令解析

1.echo

1.1 echo [on][off]

控制批處理命令在執行時是否顯示
不能控制執行結果是否顯示
如果不顯示命令echo off,則需要在該命令列前加上”@”
@:加在命令列前面,表示執行時不顯示命令列本身

1.2 echo

顯示當前的回顯設定

1.3. echo string \\不需要雙引號

輸出string

1.4 關閉路徑提示字串

在DOS提示符狀態下鍵入ECHO OFF,能夠關閉DOS提示符的顯示使螢幕只留下游標,直至鍵入ECHO ON,提示符才會重新出現.

1.5 echo.

輸出空行

1.6 echo string >a.txt

將文字寫入檔案

2. cmd

啟動新的cmd視窗

2.1 cmd/c

執行完批處理後關閉視窗

2.2 cmd/k

執行完批處理不關閉視窗

2.3 cmd.>name.txt

新建空白檔案

3. PAUSE

暫停
讓使用者看清楚程式資訊
顯示錯誤的彙編程式碼資訊

4. 幾類重定向

4.1 標準錯誤重定向輸出

[command] 2>out.txt

4.2 標準輸出重定向輸出

[command] 1>out.txt

4.3 標準重定向輸出

[command] 1>out.txt 2>&1

5. 常用環境變數

環境變數 說明 結果
%CD% 列出當前目錄 F:\
%CMDCMDLINE% 啟動當前cmd所使用的命令列 cmd /c F:\blog.bat
%COMPUTERNAME% 列出計算機名 LED-PC
%DATE% 列出當前日期 2016-07-12 週二
%ERRORLEVEL% 列出了最近使用的命令的錯誤程式碼 0
%HOMEDRIVE% 列出使用者主目錄驅動 C:
%OS% 列出系統的名字 Windows_NT
%PROCESSOR_ARCHITECTURE% 列出處理器的晶片架構 AMD64
%PROCESSOR_IDENTIFIER% 列出處理器的描述 Intel64 Family 6 Model 69 Stepping 1, GenuineIntel
%NUMBER_OF_PROCESSORS% 列出處理器的個數 4
%RANDOM% 隨機一個0-32767的數 27194
%TIME% 列出當前時間 16:21:55.34
%WINDIR% 列出作業系統目錄位置 C:\Windows
%ALLUSERSPROFILE% 列出使用者配置檔案 C:\ProgramData

6. copy

/y

不使用確認是否要覆蓋現有目標檔案的提示

/-y

使用確認是否要覆蓋現有目標檔案的提示

注:沒有後綴名則預設是目錄

7. xcopy

/s 預設

複製目錄,但不復制空目錄

/e

複製目錄,包括空目錄

/t

複製目錄結構但不復制檔案,不包括子目錄和空目錄

/i

如果目標不存在,且要複製多個檔案,則假定目標必須是目錄

  • xcopy /i/t/e

建立包含子目錄和空目錄的目錄結構

  • xcopy /i/e dir1 dir2

將目錄dir1下的所有檔案和資料夾複製到dir2

8. set

set var=c:\

宣告變數內容為”=”後的字串
copy c:\test.txt c:\%var%.txt

set /a var=8*4

宣告”=”右邊的字串為數字表達式

set /p a=<c:\test.txt

重定向輸入

set /p a=請輸入一個數字:

賦值來源鍵盤

9. start

呼叫外部程式

start /d d:\ /max /wait

  • /d d:\ 啟動path為d:\的cmd
  • /max 開始時視窗最大化
  • /min 開始時視窗最小化
  • /wait 啟動應用並等待終止

start d:\

啟動目錄為d:\的視窗

10. choice

choice 使用此命令可以讓使用者輸入一個字元,從而執行不同的命令,返回值分別為1234…

choice /c:abc /m aaa,bbb,ccc /t 10 /d b
rem errorlevel 判斷從高到低,同時跳轉內部要寫end
if errorlevel 3 goto ccc
if errorlevel 2 goto bbb
if errorlevel 1 goto aaa
:aaa 
echo aaa
goto end
:bbb 
echo bbb
goto end
:ccc 
echo ccc
goto end
:end
blog.bat

/c

選項列表

/m

選項提示資訊

/t

預設選擇之前的暫停時間

/d

/t秒後的預設選項

11. if

11.1 輸入判斷

  • 格式一(else後面需要空格)
    else 和if的尾端要在同一行上
if "%1"=="1" (
goto x
) else ( 
goto end
)
:x
echo 12
:end
pause
  • 格式二
    其中goto x需要用新的一行終止
if "%1"=="1" (goto x) else goto end
:x
echo 12
:end
pause

11.2 檔案存在判斷

否定:if not exist

if exist F:\self\Blog\testbat\*.gif del F:\self\Blog\testbat\*.gif 

11.3 程式最後返回值判斷

如果最後執行的程式返回一個等於或大於指定數字的退出程式碼,指定條件為 true。

if errorlevel 1 goto first

數值越高表示錯誤越嚴重,所以通常處理時由高到低
返回值為零時代表命令執行成功

11.4 自定義比較

符號名 含義
EQU 等於
NEQ 不等於
LSS 小於
LEQ 小於或等於
GTR 大於
GEQ 大於或等於

ERRORLEVEL

此處應該為%ERRORLEVEL%

IF %ERRORLEVEL% LEQ 1 goto okay

字串比較

if str1 leq %1 goto other

12. dir

/a

顯示具有指定屬性的檔案

  • d 目錄
  • r 只讀檔案
  • h 隱藏檔案
  • s 系統檔案
  • - 表示”否”字首

/b

使用空格式,沒有標題資訊或者摘要

/l

用小寫

/s

顯示指定目錄和子目錄下的所有檔案

13. for

in中的元素的分隔符 :空格鍵、跳格鍵、逗號、分號或等號分隔
函式體%%i用逗號、/、空格鍵
分隔符集中的字元之間不需要分隔符
for語句以行為單位
變數名區分大小寫

13.1 基本使用

echo 顯示計算機磁碟碟符
set str=c d e f g h i j k l m n o p q r s t u v w x y z
for %%i in (%str%) do if exist %%i: echo %%i:   

echo 當前目錄下的所有檔案
for %%i in (*.*) do echo %%i 

echo 當前目錄下的所有目錄,且目錄路徑存於set中 
for /d  %%i in (*) do echo %%i

echo 當前目錄下的遞迴目錄樹
for /r /d %%i in (*) do echo %%i

echo 當前目錄下的遞迴目錄樹
for /r /d %%i in (.) do echo %%i

echo當前目錄及其下的所有子目錄的所有exe檔案
for /r  %%i in (*.exe) do echo %%i

echo 增量形式從開始到結束的一個數字序列
for /l %%i in (5,-1,3) do echo %%i

13.2 for /f

for /f "eol=. delims=; tokens=1-4,* skip=1 " %%i in ("test1.txt") do echo %%i,%%j,%%k

skip

skip=n:跳過n行,解析n+1行,in中的每個檔案都跳過n行

eol

忽略以”.”開始的行;如果不指定eol預設忽略以”;”開始的行(注:eol=;這種預設設定,在delims=;時變得無效)

tokens

  • 預設值為空格或者跳格鍵
  • 格式一:1-4表示1,2,3,4;
  • 格式二:1,2,表示字串從左往右被切分成緊跟在之前的數值所表示的節數之後,剩餘整體被*所表示的一個變數接收
  • %%i和%%j和%%k由tokens隱式宣告,第一個%%i由指定的形式變數決定
  • 最大值不能超過26,而且不要試圖宣告一個高於字母”z”,或者”Z”的變數
  • 預設值為1

usebackq

FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i

set為dos命令,上述例子顯示環境變數

13.3 變數擴充套件

命令 作用 執行結果
%~I 刪除任何引號(“),擴充套件 %I F:\self\Blog\testbat\blog.bat
%~fI 將 %I 擴充套件到一個完全合格的路徑名 F:\self\Blog\testbat\blog.bat
%~dI 僅將 %I 擴充套件到一個驅動器號 F:
%~pI 僅將 %I 擴充套件到一個路徑 \self\Blog\testbat\
%~nI 僅將 %I 擴充套件到一個檔名 blog
%~xI 僅將 %I 擴充套件到一個副檔名 .bat
%~sI 擴充套件的路徑只含有短名 F:\self\Blog\testbat\blog.bat
%~aI 將 %I 擴充套件到檔案的檔案屬性 –a——
%~tI 將 %I 擴充套件到檔案的日期/時間 2016-07-13 17:08
%~zI 將 %I 擴充套件到檔案的大小 127

14. 延遲擴充套件變數

  • for語句中延遲變數擴充套件
    取變數時需要使用!var!
setlocal enabledelayedexpansion
set num=0
for /f %%i in ('dir /a-d /b') do (
    set /a num+=1
    echo the values of num is !num!
    )
  • 簡單延遲變數擴充套件
    set num=3&&call echo %num%

15. find

type a.txt|find "string"

如果沒有指定路徑,find將搜尋鍵入的或者由另一個命令產生的文字
FIND [/V] [/C] [/N] [/I] “string” [[drive:][path]filename[ …]]
注:上述string雙引號是必須的

/v

顯示所有未包含指定字串的行

/c

顯示包含字串的行數

/n

顯示行號

/i

搜尋時忽略大小寫

16. 預處理機制

預處理含義:將一條完整的語句讀入記憶體,語法有誤則給出錯誤提示或者退出批處理環境;無誤則在語句讀入記憶體之前將被引用的變數以及百分號對替換為變數的值

  • 一條完整的語句
    這裡寫圖片描述
  • 變數的替換先於特殊符號的處理
    這裡寫圖片描述

17. 組合命令

命令 作用
& 順序執行而不管是否有命令執行失敗
&& 順序執行,自動判斷,當命令出錯時不再執行後續命令
|| 執行多條命令,遇到一個執行正確的命令就退出


&和&&優先順序高於||

18. 管道命令

命令 作用
| 前一命令的輸出當做後一命令的輸入
> 輸出重定向,清空原檔案
>> 輸出重定向,追加到原檔案
>& 將一個控制代碼的輸出寫入到另一個控制代碼的輸入
< 輸入重定向

19. 特殊符號

命令 作用
^ 特殊符號的前導符號
, 和空格一樣的預設分隔符號
() 包含命令


演示:

這裡寫圖片描述

dir c:\ && dir d:\ > a.txt
rem a.txt中只儲存了D盤的檔案目錄
(dir c:\&&dir d:\)>a.txt
rem a.txt中儲存了C盤和D盤的檔案目錄

20. 時間日期

命令 作用
time 顯示當前時間設定和輸入新時間的提示
time \t 顯示當前時間
date 顯示當前時間設定和輸入新時間的提示
date \t 顯示當前日期

21. 迴圈批處理

@echo off
if exist C:\Users\LED\Desktop\testbat\*.gif del C:\Users\LED\Desktop\testbat\*.gif
a.bat

22. attrib

attrib +s+h+r path

+ 設定屬性
- 清除屬性

r

只讀屬性,即防寫

a

存檔屬性
存檔屬性是用來標記檔案改動的.即在上一次備份後文件有所改動.一些備份軟體在備份的時候會只去備份帶有存檔屬性的檔案.

s

系統屬性,標明檔案為系統呼叫


注意:r屬性必須和a和s屬性一同使用

/s

處理當前資料夾及子資料夾中匹配檔案(預設當前資料夾)

23. task

根據執行緒ID找到執行緒詳細資訊

tasklist|findstr "2720"
tasklist /fi "PID eq 2720"

其他篩選器引數
這裡寫圖片描述

根據執行緒ID終止執行緒

taskkill /PID 7380 /F /T

/F

強制終止程序

/T

終止指定的程序和由它啟用的子程序

24. 空裝置nul

command 1>null 2>&1

25. netstat

@echo off
netstat -a -n -o> a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt 
pause

-a

顯示所有連線和偵聽埠

-n

以數字形式顯示地址和埠號

-o

顯示於每個連結關聯的程序ID

26. 跳轉

goto label
:label

27. 呼叫其他批處理

call newname.bat 0
newname.bat中%1用0替代

28. 批處理長檔案名錶示格式

當檔名過長時,採用8個字元縮寫,即寫頭六個字母(略去空白),另加波浪號和1,如果有重複的則遞增

例子:
Tempor~1

29. 註冊安裝

regsvr32

/s 指定regsvr2安靜執行

msi

*.msi /qn 靜默安裝
*.msi /qb 顯示基本流程

30. 註釋

rem

rem echo 註釋

::

:: echo 註釋

31. 批處理引數的使用

%0表示批處理命令本身,其它引數字串用%1到%9順序表示
批處理必須使用兩個百分號,其中一個會被過略掉

32. 其他命令

cls

清空螢幕

help | more

前一命令的輸出當做後一命令的輸入,分頁顯示幫助

33. 註解

  • bat是16位的dos cmd 是32位的dos