(1)、 “.bat”: 這是微軟的第一個(gè)批處理文件的后綴名,在幾乎所有的Windows 操作系統內都能運行。
(2)、 “.cmd”: 是為Windows NT 設計的命令行腳本, 為Cmd.exe shell而設計的, 對于COMMAND.COM不具有向后兼容性。
(3)、目前所知道的.cmd 和 .bat文件的區別是對ERRORLEVEL變量的改變:當Command Extensions(命令行擴展)處于enabled狀態(tài)時(shí),哪怕是.cmd文件中一個(gè)成功執行的命令都可以改變ERRORLEVEL的值,而在.bat文件中ERRORLEVEL 變量只有在遇到錯誤的時(shí)候才發(fā)生改變。
2.@echo off/echo on
(1). “echo” 用來(lái)在控制臺上顯示信息。
(2). “echo.” 用來(lái)顯示一空行。(注意:echo和右下角的點(diǎn)之間沒(méi)有空格,如果有空格就變成顯示句點(diǎn)了。)
(3). “echo off”: 在使用了這行命令之后,其他命令都只顯示命令的結果,而不顯示命令本身。
(4). “echo on”: 這是默認值,表示顯示所有的命令結果和命令行本身。
(5).“echo”: 當執行echo而不帶任何參數的時(shí)候,會(huì )顯示echo的打開(kāi)或關(guān)閉的狀態(tài):“ECHO is on” 或者 “ECHO is off”。
(6). “@”:@ 符號表示不顯示本行的命令本身。如果只用echo off,雖然echo off后面的命令不顯示出來(lái),只顯示命令的結果,但是echo off它自己確被顯示出來(lái)了,這就是使用@echo off的原因。
3.SETLOCAL/ENDLOCAL
(1).SETLOCAL用來(lái)控制批處理文件中變量的可見(jiàn)性。就是高級語(yǔ)言常說(shuō)的局部變量。凡是在SETLOCAL和ENDLOCAL之間的變量都是局部的,以免被其他腳本文件改變變量的值,而沒(méi)有使用這個(gè)標示的都是Globalvisible(全局變量),很可能被其他文件所改變。下面的例子很好的說(shuō)明了這一點(diǎn)。
@echo off | 執行這個(gè)文件,將輸出:
第二個(gè)version是全局變量,但是沒(méi)有定義,所以是空值。再次執行:
|
@echo off | 執行第二個(gè)文件:
再次執行:
|
由此可見(jiàn)變量的作用域在簡(jiǎn)單的批處理文件還是很慎重,否則可以造成千變萬(wàn)化的結果,這樣這個(gè)腳本就很不穩定了。所以,變量作用域很重要,得注意。
(2). EnableDelayedExpansion. (參考百度:http://baike.baidu.com/view/2923132.htm )
| 代碼 | 結果 | |
@echo off | show 當解析到%var%是,CMD還沒(méi)有執行完任何語(yǔ)句,所以系統并不認識這個(gè)變量,所以認為變量沒(méi)有定義,所以顯示空值。 | |
@echo off | show test 使用了變量延遲擴展,并使用!var!,其實(shí)在執行的時(shí)候也不認識這個(gè)變量,但是這條語(yǔ)句執行完以后,仍然返回去賦值。這種事后處理,就是變量延遲擴展。 | |
| For語(yǔ)句看起來(lái)寫(xiě)了很多行,其實(shí)認為是一條語(yǔ)句。所以如果在沒(méi)有使用變量延遲擴展的時(shí)候,在For語(yǔ)句里的每一行,都只是記憶著(zhù)系統所記憶的東西。而 使用了變量延遲擴展之后,會(huì )執行完了整條語(yǔ)句,再“事后處理”給與賦值,然后才顯示到控制臺。下面的例子很能說(shuō)明問(wèn)題。 | ||
@echo off | [0] | |
@echo off | [0] | |
在CMD里面,系統使用“^”作為脫字符。使用變量延遲擴展ENABLEDELAYEDEXPANSION之后,脫字符^ 就可以一直產(chǎn)生作用,而不再局限于一個(gè)命令行。這樣對于處理包含HTML和XML格式的字符的時(shí)候,就方便多了。請看下面的例子。
@echo off
REM 這個(gè)文件會(huì )創(chuàng )建World.txt到本地磁盤(pán),文件內容為Hello。
REM 也就是第二次運行的時(shí)候,脫字符沒(méi)有發(fā)揮作用。
SETLOCAL
Set _html= Hello^>World.txt
Echo %_html%
ENDLOCAL
@echo off
REM 這個(gè)文件會(huì )輸出Hello>World.txt,脫字符一直產(chǎn)生作用。
SETLOCAL EnableDelayedExpansion
Set _html= Hello^>World.txt
Echo !_html!
ENDLOCAL
@echo off
REM 使用變量延遲擴展來(lái)處理html語(yǔ)句。
SETLOCAL EnableDelayedExpansion
Set _html=html format: ^<title^>Hello world^</title^>
Echo !_html!
ENDLOCAL
(3). DISABLEEXTENSIONS.
值得注意的是,這里的擴展不是擴展名,而是命令的擴展功能,比如 “/F” 參數就是For循環(huán)的命令擴展。
只有使用了命令擴展我們才能執行下面的語(yǔ)句。
FOR /F "DELIMS=" %%a IN (test.TXT) DO @echo %%a
否則我們要輸出一個(gè)文件,只能使用Type test.txt了。命令擴展默認是開(kāi)啟的。
4.Set
(1). SET 不帶任何參數: 將顯示當前用戶(hù)的所有系統環(huán)境變量。(set)
(2). SET 帶一個(gè)變量名: 嘗試搜索并顯示以這個(gè)變量名開(kāi)頭的環(huán)境變量。(set PROCESSOR就會(huì )顯示以PROCESSOR開(kāi)始的變量)
(3). SET variable=string: 給一個(gè)變量賦值。
(4). SET “”: 使用一對空的雙引號,會(huì )顯示一個(gè)不帶參數的情況下沒(méi)顯示出來(lái)的變量。我這里就顯示下面兩個(gè)奇怪的變量。
=C:=C:\Users\Lingli
=E:=E:\Powershell
使用cd %=C:%還真可以轉到C:\Users\Lingli目錄下。
(5). SET “var=”(or SET var=): 刪除一個(gè)變量。
(6). SET /A variable=expression: 使用算數運算符來(lái)給變量賦值。
() - 組合
! ~ - - 一元操作符
* / % - 算數運算符
+ - -算數運算符
<< >> - 邏輯偏移
& - 位與
^ - 位異或
| - 位或
= *= /= %= += -= - 賦值
&= ^= |= <<= >>=
(7). SET /P variable=[提示字符]:提示用戶(hù)輸入并把輸入的值賦給variable。提示字符可以為空。有時(shí)可以使用CHOICE來(lái)代替SET /P.
@echo off
setlocal
set /p version=Please enter the QQ version:
echo you will install QQ %version%
endlocal
(8). 有用的環(huán)境變量。
%CD% - 當前路徑名。
%DATE% - 當前日期。
%TIME% - 當前時(shí)間。
%RANDOM% - 顯示0 到32767之間的一個(gè)隨機數。你看CMD也是可以獲取隨機數的。
5.Choice
(1). 詳細語(yǔ)法:
| CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text] 該命令可以提供用戶(hù)一個(gè)選擇列表,并使用ERRORLEVEL參數返回用戶(hù)選擇項的序號。第一項對于1,第二項對應 2,依次類(lèi)推,如果用戶(hù)按CTRL+C退出而不選擇,就返回0。 | |
| /C choices /N /CS /T timeout /D choice /M text | 用字母列出所提供的選項,默認是"YN",即是和否。 隱藏選擇列表。如果使用這個(gè)選項,那么提示的文字里最后寫(xiě)清楚以下。不推薦使用。 激活大小寫(xiě)敏感。默認是對大小寫(xiě)不敏感。 選擇超時(shí)設置。 超時(shí)后的默認選項。 提示字符。最好把要選擇的問(wèn)題將清楚。 |
(2). 例子:
@echo off
SETLOCAL
CHOICE /C ABC /M "選擇登陸用戶(hù):A - 管理員;B 域用戶(hù);C注冊用戶(hù)"
IF %errorlevel%==1 goto :Admin
IF %errorlevel%==2 goto :Domain
IF %errorlevel%==3 goto :Local
goto Exit
:Admin
echo 歡迎管理員
goto Exit
:Domain
echo 歡迎域用戶(hù)
goto Exit
:Local
echo 歡迎注冊用戶(hù)
goto Exit
:Exit
endlocal
6.Rem and Arguments.
(1). REM [comment]: 批處理文件的注釋符,可以使用“::” 來(lái)代替REM。
(2). 參數。
%0對應文件名本身,其他分別對應一個(gè)參數值,支持255個(gè)參數。
| Test.cmd | 1 | 2 | 3 | … | n | … | 255 |
| %0 | %1 | %2 | %3 | … | %n | … | %255 |
(3). 文件名參數擴展。
當使用文件名作參數的時(shí)候,可以使用如下文件名擴展。下面的例子擴展%1,其實(shí)對所有的參數都可以進(jìn)行類(lèi)似的擴展。
%~f1 - 擴展%1 為帶路徑的全名。
%~d1 - 只顯示磁盤(pán)名稱(chēng)。
%~p1 - 只顯示文件路徑。
%~n1 - 只顯示文件名,不包括后綴名,也不包括路徑。
%~x1 - 只顯示后綴名。
%~s1 - 變成短文件名,將包含“~”符號。
%~1 - 有時(shí)候文件名包含空格是,會(huì )對文件名加雙引號。這個(gè)功能是去掉雙引號。
%~a1 - 顯示文件的屬性。
%~t1 - 顯示文件的修改時(shí)間。
%~z1 - 顯示文件的大小。
上面的擴展是可以組合的:
%~dp1 - 擴展%1 為磁盤(pán)名稱(chēng)和路徑名。
%~nx2 - 擴展%2 為文件名和文件后綴名。
::Test.bat
::Example: test.bat test.bat
@echo off
setlocal
set fn=%~f1
echo %fn%
endlocal
7.IF 語(yǔ)句
(1). 詳細語(yǔ)法:
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 : 比較時(shí)不考慮文件名大小寫(xiě),即大小寫(xiě)不敏感。
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語(yǔ)句也是一條語(yǔ)句)
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 循環(huán)
(1). 詳細語(yǔ)法:
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 - 行首注釋符。如果有這個(gè)注釋符,這一行不做處理。
skip=n - 制定前n行跳過(guò),不處理
delims=xxx - 分隔符集合。默認分隔符是空格和Tab。
tokens=x,y,m-n - 選擇哪一塊用于循環(huán)操作。
usebackq - 當文件名有空格需要使用雙引號時(shí),使用usebackq把雙引號內的東西當文件處理,否則當字符串處理。
注意:
在批處理文件中,參數使用%%parameter,而當你拿到命令行使用的時(shí)候,使用%parameter,就是一個(gè)百分號的區別。同時(shí)變量名區分大小寫(xiě),所以%g和G是不相同的。
(set) 說(shuō)明是文件集合,一個(gè)文件或多個(gè)文件,還可以對文件名使用通配符。
(2). 例子:
@echo off
setlocal
for %%G in (*.bat *.txt) do echo %%G
endlocal
9.Net.
(1). 管理服務(wù): Net start, stop, pause, continue [service]。
(2). 連接到一個(gè)共享文件:Net use。
NET USE [磁盤(pán)名:] \\共享名稱(chēng)[\子目錄名] [密碼] [/USER:[域名\]用戶(hù)名]
NET USE磁盤(pán)名:]: /delete
(3). Net share: 顯示本地的所有共享,包括隱藏的共享。
(4). Net share ShareName: 顯示共享的相關(guān)信息。
(5). 創(chuàng )建一個(gè)本地共享: NET SHARE sharename=drive:path /REMARK:"text" [/CACHE:Manual | Automatic | No ]
(6). 修改用戶(hù)數量限制和標示。
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: 把一個(gè)賬戶(hù)加入一個(gè)本地組,如加入管理員組:net localgroup administrators DomainName\UserName /add
(10). 機器重命名: netdomrenamecomputer 原機器名 /newname:修改后的機器名 /UserD:user /PasswordD:password
(11). 加入域: net dom join 計算機名/domain:域名 /UserD:域管理員賬戶(hù) /PasswordD:域管理員密碼
聯(lián)系客服