轉 BAT CMD 批處理文件腳本總結(中文)

1.               綜述html

1」.bat」: 這是微軟的第一個批處理文件的後綴名,在幾乎全部的Windows 操做系統內都能運行。shell

2 「.cmd」: 是爲Windows NT 設計的命令行腳本, Cmd.exe shell而設計的, 對於COMMAND.COM不具備向後兼容性。express

3、目前所知道的.cmd .bat文件的區別是對ERRORLEVEL變量的改變:當Command Extensions (命令行擴展)處於enabled狀態時,哪怕是.cmd文件中一個成功執行的命令均可以改變ERRORLEVEL的值,而在.bat 文件中ERRORLEVEL 變量只有在遇到錯誤的時候才發生改變。less

 

2.               @echo off/echo ondom

1. 「echo」 用來在控制檯上顯示信息。ide

2. 「echo.」 用來顯示一空行。(注意:echo和右下角的點之間沒有空格,若是有空格就變成顯示句點了。)spa

3. 「echo off」: 在使用了這行命令以後,其餘命令都只顯示命令的結果,而不顯示命令自己。操作系統

4. 「echo on」: 這是默認值,表示顯示全部的命令結果和命令行自己。命令行

5. 「echo」: 當執行echo而不帶任何參數的時候,會顯示echo的打開或關閉的狀態:「ECHO is on」 或者 「ECHO is off」設計

6. 「@」:@ 符號表示不顯示本行的命令自己。若是隻用echo off,雖然echo off後面的命令不顯示出來,只顯示命令的結果,可是echo off它本身確被顯示出來了,這就是使用@echo off的緣由。

3.               SETLOCAL/ENDLOCAL

1. SETLOCAL用來控制批處理文件中變量的可見性。就是高級語言常說的局部變量。凡是在SETLOCALENDLOCAL之間的變量都是局部的,以避免被其餘腳本文件改變變量的值,而沒有使用這個標示的都是Global visible(全局變量),極可能被其餘文件所改變。下面的例子很好的說明了這一點。

@echo off

setlocal

set version=1.0

echo the first version is %version%

endlocal

echo the second version is %version%

::The follow is global variable

set version=2.0

echo the third version is %version%

執行這個文件,將輸出:

the first version is 1.0

the second version is

the third version is 2.0

第二個version是全局變量,可是沒有定義,因此是空值。再次執行:

the first version is 1.0

the second version is 2.0

the third version is 2.0

@echo off

setlocal

set version=1.0

echo the first version is %version%

endlocal

echo the second version is %version%

::The follow is global variable

set version=5.0

echo the third version is %version%

執行第二個文件:

the first version is 1.0

the second version is 2.0

the third version is 5.0

再次執行:

the first version is 1.0

the second version is 5.0

the third version is 5.0

 

      因而可知變量的做用域在簡單的批處理文件仍是很慎重,不然能夠形成變幻無窮的結果,這樣這個腳本就很不穩定了。因此,變量做用域很重要,得注意。

 

2. EnableDelayedExpansion. (參考百度:http://baike.baidu.com/view/2923132.htm

代碼

結果

@echo off

setlocal

set var=test & echo show %var%

endlocal

show

當解析到%var%是,CMD尚未執行完任何語句,因此係統並不認識這個變量,因此認爲變量沒有定義,因此顯示空值。

@echo off

Setlocal ENABLEDELAYEDEXPANSION

set var=test & echo show !var!

endlocal

show test

使用了變量延遲擴展,並使用!var!,其實在執行的時候也不認識這個變量,可是這條語句執行完之後,仍然返回去賦值。這種過後處理,就是變量延遲擴展。

For語句看起來寫了不少行,其實認爲是一條語句。因此若是在沒有使用變量延遲擴展的時候,在For語句裏的每一行,都只是記憶着系統所記憶的東西。而使用了變量延遲擴展以後,會執行完了整條語句,再「過後處理」給與賦值,而後才顯示到控制檯。下面的例子很能說明問題。

@echo off

setlocal

:: count to 5

set _tst=0

FOR /l %%G in (1,1,5) Do (echo [%_tst%] & set /a _tst+=1)

echo Total = %_tst%

[0]

[0]

[0]

[0]

[0]

Total = 5

@echo off

setlocal EnableDelayedExpansion

:: count to 5

set _tst=0

FOR /l %%G in (1,1,5) Do (echo [!_tst!] & set /a _tst+=1)

echo Total = !_tst!

[0]

[1]

[2]

[3]

[4]

Total = 5

     

 

         

CMD裏面,系統使用「^」做爲脫字符。使用變量延遲擴展ENABLEDELAYEDEXPANSION以後,脫字符^ 就能夠一直產生做用,而再也不侷限於一個命令行。這樣對於處理包含HTMLXML格式的字符的時候,就方便多了。請看下面的例子。

@echo off

REM 這個文件會建立World.txt到本地磁盤,文件內容爲Hello

REM 也就是第二次運行的時候,脫字符沒有發揮做用。

SETLOCAL

Set _html= Hello^>World.txt

Echo %_html%

ENDLOCAL

@echo off

REM 這個文件會輸出Hello>World.txt,脫字符一直產生做用。

SETLOCAL EnableDelayedExpansion

Set _html= Hello^>World.txt

Echo !_html!

ENDLOCAL

@echo off

REM 使用變量延遲擴展來處理html語句。

SETLOCAL EnableDelayedExpansion

Set _html=html format: ^<title^>Hello world^</title^>

Echo !_html!

ENDLOCAL

 

 

3. DISABLEEXTENSIONS.

值得注意的是,這裏的擴展不是擴展名,而是命令的擴展功能,好比 「/F」 參數就是For循環的命令擴展。

只有使用了命令擴展咱們才能執行下面的語句。

 FOR /F "DELIMS=" %%a IN (test.TXT) DO @echo %%a

 不然咱們要輸出一個文件,只能使用Type test.txt了。命令擴展默認是開啓的。

 

4.               Set

1. SET 不帶任何參數: 將顯示當前用戶的全部系統環境變量。(set)

2. SET 帶一個變量名: 嘗試搜索並顯示以這個變量名開頭的環境變量。(set PROCESSOR就會顯示以PROCESSOR開始的變量)

3. SET variable=string: 給一個變量賦值。

4. SET 「」: 使用一對空的雙引號,會顯示一個不帶參數的狀況下沒顯示出來的變量。我這裏就顯示下面兩個奇怪的變量。

    =C:=C:\Users\Lingli

    =E:=E:\Powershell

    使用cd %=C:%還真能夠轉到C:\Users\Lingli目錄下。

5. SET 「var=」(or SET var=): 刪除一個變量。

6. SET /A variable=expression: 使用算數運算符來給變量賦值。

()                  - 組合

! ~ -               - 一元操做符

* / %               - 算數運算符

+ -                 -算數運算符

<< >>               - 邏輯偏移

&                   - 位與

^                   - 位異或

|                   - 位或

= *= /= %= += -=    - 賦值

 &= ^= |= <<= >>=

 

7. SET /P variable=[提示字符]:提示用戶輸入並把輸入的值賦給variable。提示字符能夠爲空。有時可使用CHOICE來代替SET /P.

@echo off

setlocal

set /p version=Please enter the QQ version:

echo you will install QQ %version%

endlocal

 

8. 有用的環境變量。

%CD% - 當前路徑名。

%DATE% - 當前日期。

%TIME% - 當前時間。

%RANDOM% - 顯示0 32767之間的一個隨機數。你看CMD也是能夠獲取隨機數的。

 

5.               Choice

1. 詳細語法:

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

 

該命令能夠提供用戶一個選擇列表,並使用ERRORLEVEL參數返回用戶選擇項的序號。第一項對於1,第二項對應 2,依次類推,若是用戶按CTRL+C退出而不選擇,就返回0

/C    choices

  

 /N

 

 

 /CS

  

 /T    timeout

  

 /D    choice

  

 /M    text

 

用字母列出所提供的選項,默認是"YN",便是和否。

 

隱藏選擇列表。若是使用這個選項,那麼提示的文字裏最後寫清楚如下。不推薦使用。

 

激活大小寫敏感。默認是對大小寫不敏感。

 

選擇超時設置。

 

超時後的默認選項。

 

提示字符。最好把要選擇的問題將清楚。

 

2. 例子:

@echo off

SETLOCAL

CHOICE /C ABC /M "選擇登錄用戶:A - 管理員;B 域用戶;C註冊用戶"

IF %errorlevel%==1 goto :Admin

IF %errorlevel%==2 goto :Domain

IF %errorlevel%==3 goto :Local

goto Exit

 

:Admin

    echo 歡迎管理員

    goto Exit

 

:Domain

    echo 歡迎域用戶

    goto Exit

 

:Local

    echo 歡迎註冊用戶

    goto Exit

 

:Exit

endlocal

 

6.               Rem and Arguments.

1. REM [comment]: 批處理文件的註釋符,可使用「::」 來代替REM

2. 參數。

%0對應文件名自己,其餘分別對應一個參數值,支持255個參數。

Test.cmd

1

2

3

n

255

%0

%1

%2

%3

%n

%255

 

3. 文件名參數擴展。

當使用文件名做參數的時候,可使用以下文件名擴展。下面的例子擴展%1,其實對全部的參數均可以進行相似的擴展。
%~f1 - 擴展%1 爲帶路徑的全名。 %~d1 - 只顯示磁盤名稱。 %~p1 - 只顯示文件路徑。 %~n1 - 只顯示文件名,不包括後綴名,也不包括路徑。 %~x1 - 只顯示後綴名。 %~s1 - 變成短文件名,將包含「~」符號。 %~1 - 有時候文件名包含空格是,會對文件名加雙引號。這個功能是去掉雙引號。 %~a1 - 顯示文件的屬性。 %~t1 - 顯示文件的修改時間。 %~z1 - 顯示文件的大小。  

上面的擴展是能夠組合的:

%~dp1 - 擴展%1 爲磁盤名稱和路徑名。

%~nx2 - 擴展%2 爲文件名和文件後綴名。

::Test.bat

::Example: test.bat test.bat

@echo off

setlocal

set fn=%~f1

echo %fn%

endlocal

 

7.               IF 語句

1. 詳細語法:

File syntax  

IF [NOT] EXIST filename command

IF [NOT] EXIST filename (command) ELSE (command)

 

String syntax  

IF [/I] [NOT] item1==item2 command

IF [/I] item1 compare-op item2 command

IF [/I] item1 compare-op item2 (command) ELSE (command)

 

Error Check Syntax

IF [NOT] DEFINED variable command

IF [NOT] ERRORLEVEL number command

IF CMDEXTVERSION number command

 

Key

/I         : 比較時不考慮文件名大小寫,即大小寫不敏感。

compare-op : 邏輯比較

EQU : equal 等於

NEQ : not equal 不等於

LSS : less than 小於

LEQ : less than or equal小於或等於

GTR : greater than 大於

GEQ : greater than or equal大於或等於

 

2. 例子(能夠看出If語句也是一條語句)

IF EXIST filename (del filename) ELSE ( echo The file was not found.)

IF EXIST filename (

del filename

) ELSE (

echo The file was not found.

)

 

8.               For 循環

1. 詳細語法:

FOR-Files

FOR %%parameter IN (set) DO command

 

FOR-Files-Rooted at Path  

FOR /R [[drive:]path] %%parameter IN (set) DO command

 

FOR-Folders

FOR /D %%parameter IN (folder_set) DO command

 

FOR-List of numbers  

FOR /L %%parameter IN (start,step,end) DO command

 

FOR-File contents  

FOR /F ["options"] %%parameter IN (filenameset) DO command

FOR /F ["options"] %%parameter IN ("Text string to process") DO command

 

FOR-Command Results

       FOR /F ["options"] %%parameter IN ('command to process') DO command

 

 

 

eol=c           - 行首註釋符。若是有這個註釋符,這一行不作處理。

skip=n         - 制定前n行跳過,不處理

delims=xxx      - 分隔符集合。默認分隔符是空格和Tab

tokens=x,y,m-n - 選擇哪一塊用於循環操做。

usebackq      - 當文件名有空格須要使用雙引號時,使用usebackq把雙引號內的東西當文件處理,不然當字符串處理。

 

注意:

在批處理文件中,參數使用%%parameter,而當你拿到命令行使用的時候,使用%parameter,就是一個百分號的區別。同時變量名區分大小寫,因此%gG是不相同的。

(set) 說明是文件集合,一個文件或多個文件,還能夠對文件名使用通配符。

 

2. 例子:

@echo off

setlocal

for %%G in (*.bat *.txt) do echo %%G

endlocal

 

9.               Net.

1. 管理服務: Net start, stop, pause, continue [service]

2. 鏈接到一個共享文件:Net use

          NET USE [磁盤名:] \\共享名稱[\子目錄名] [密碼] [/USER:[域名\]用戶名]

          NET USE磁盤名:]: /delete

3. Net share: 顯示本地的全部共享,包括隱藏的共享。

4. Net share ShareName: 顯示共享的相關信息。

5. 建立一個本地共享: NET SHARE sharename=drive:path /REMARK:"text" [/CACHE:Manual | Automatic | No ]

6. 修改用戶數量限制和標示。

          NET SHARE sharename /USERS:number /REMARK:"text"

          NET SHARE sharename /UNLIMITED /REMARK:"text"

7. 刪除共享: NET SHARE {sharename | devicename | drive:path} /DELETE

8. Net view \\計算機名: 列出遠程機器的全部共享。

9. Net localgroup: 把一個帳戶加入一個本地組,如加入管理員組:net localgroup administrators DomainName\UserName /add

10. 機器重命名: netdom renamecomputer 原機器名/newname:修改後的機器名/UserD:user/PasswordD:password

11. 加入域: net dom join 計算機名/domain:域名 /UserD:域管理員帳戶 /PasswordD:域管理員密碼

相關文章
相關標籤/搜索