Windows批處理符號簡介、常用Dos命令

三、批處理符號簡介 

【 回顯屏蔽 @ 】
表示不顯示@後面的命令,在***過程中(例如使用批處理來格式化敵人的硬盤)自然不能讓對方看到你使用的命令啦。 
@用法舉例:通過運行批處理文件對比pause和@pause命令即可明瞭@的效果。

【 重定向1 >與>> 】
將輸出信息重定向到指定的設備或文件。系統默認輸出到顯示器。
如:echo aaaaa>a.txt 即可將本在顯示器上顯示的信息aaaaa輸出到文件a.txt中,屏幕上沒有任何顯示。如果文件a.txt本來已經存在,該命令將首先擦除a.txt中的 所有信息,然後寫入信息aaaaa;若a.txt本來就不存在,該命令即可新建一個a.txt文件,並寫入信息aaaaa。
echo aaaaa>>a.txt 類似於echo aaaaa>a.txt。區別在於:如果a.txt本已存在,>a.txt會擦除a.txt中的原有內容,而>>a.txt並不 擦除原有內容,僅在a.txt文件的末尾添加信息aaaaa。a.txt不存在時,二者沒有差別。

【 重定向2 < 】
將輸入信息來源重定向爲指定的設備或文件。系統默認從顯示器讀取輸入信息。
重定向使用舉例:
=========================================
@echo off
echo abcdefg——這是文件a.txt中的信息>a.txt
echo 請任意輸入字符,以回車結束:
set /p ifo=
cls
echo 【 從屏幕獲得的輸入信息 】
echo %ifo%
set /p ifo=
echo 【 從文件a.txt獲得的輸入信息 】
echo %ifo%
pause>nul
=========================================
讀者觀察命令與輸出即可體會到重定向的功能和效果。

  【 管道符號 | 】

將管道符號前面命令的輸出結果重定向輸出到管道符號後面的命令中去,作爲後面命令的輸入。使用格式爲:command_1|command_2
管道符號使用舉例:
=========================================
@echo off
echo aaaa>a.txt
del /p a.txt
pause
=========================================
@echo off
echo aaaa>a.txt
echo y|del /p a.txt
pause
=========================================
對比以上兩個批處理執行結果,讀者即可明白管道符的用法和效果。
需要說明的是,上面del命令添加開關/p只是爲了讓讀者明白管道符號的使用方法,實際刪除文件時不加/p開關即可實現無提示直接刪除。

【 轉義符 ^ 】
將特殊符號轉化爲一般符號,即剝離特殊符號的特殊地位。特殊符號指:| & > <</span>
比如,如果我們想輸出符號“>”,直接用命令 echo > 是不行的,必須修改爲 echo ^> 。其餘幾個特殊符號類似需要有同樣的處理。
轉義字符使用舉例:
=========================================
@echo off
echo aaaa>a.txt
echo 第一句echo執行完畢
echo aaaa^>a.txt
echo 第二句echo執行完畢
pause
=========================================
比較上面的兩句echo,第一句echo將信息aaaa輸出到了文件a.txt,而第二句echo則在直接屏幕上顯示除aaaa>a.txt

【 邏輯命令符 】
邏輯命令符包括:&、&&、||
&-無條件執行&符號後面的命令;
&&-當&&前面的命令成功執行時,執行&&後面的命令,否則不執行;
||-當||前面的命令失敗時,執行||後面的命令,否則不執行。
=========================================
@echo off
echo ^|^|
reg add HKCU /v try /f||echo **成功**
reg add HKCU1 /v try /f||echo **失敗**
echo ^&^&
reg delete HKCU /v try /f&&echo **成功**
reg delete HKCU /v try /f&&echo **失敗**
echo ^&
reg delete HKCU /v try /f&echo **成功**
reg delete HKCU /v try /f&echo **失敗**
pause
=========================================
執行reg add或reg delete後,系統會給出執行結果;我們通過echo命令也給出了“執行結果”。對比系統和我們自己給出的結果,既可以驗證邏輯命令的判斷機理。

  【【 四、常用DOS命令 】】

【 文件夾管理 】
cd 顯示當前目錄名或改變當前目錄。
md 創建目錄。
rd 刪除一個目錄。
dir 顯示目錄中的文件和子目錄列表。
tree 以圖形顯示驅動器或路徑的文件夾結構。
path 爲可執行文件顯示或設置一個搜索路徑。
xcopy 複製文件和目錄樹。
【 文件管理 】
type 顯示文本文件的內容。
copy 將一份或多份文件複製到另一個位置。
del 刪除一個或數個文件。
move 移動文件並重命名文件和目錄。(Windows XP Home Edition中沒有)
ren 重命名文件。
replace 替換文件。
attrib 顯示或更改文件屬性。
find 搜索字符串。
fc 比較兩個文件或兩個文件集並顯示它們之間的不同
【 網絡命令 】
ping 進行網絡連接測試、名稱解析
ftp 文件傳輸
net 網絡命令集及用戶管理
telnet 遠程登陸
ipconfig顯示、修改TCP/IP設置
msg 給用戶發送消息
arp 顯示、修改局域網的IP地址-物理地址映射列表
【 系統管理 】
at 安排在特定日期和時間運行命令和程序
shutdown立即或定時關機或重啓
tskill 結束進程
taskkill結束進程(比tskill高級,但WinXPHome版中無該命令)
tasklist顯示進程列表(Windows XP Home Edition中沒有)
sc 系統服務設置與控制
reg 註冊表控制檯工具
powercfg控制系統上的電源設置
對於以上列出的所有命令,在cmd中輸入命令+/?即可查看該命令的幫助信息。如find /?

【【 五、語句結構 】】

類似於C語言,批處理也有它的語句結構。批處理的語句結構主要有選擇結構(if語句)、循環結構(for語句)等。
【 if語句(選擇結構) 】
if語句實現條件判斷,包括字符串比較、存在判斷、定義判斷等。通過條件判斷,if語句即可以實現選擇功能。
1、字符串比較
if語句僅能夠對兩個字符(串)是否相同、先後順序進行判斷等。其命令格式爲:
IF [not] string1 compare-op string2 command1 [else command2]
其中,比較操作符compare-op有以下幾類:
== - 等於
EQU - 等於
NEQ - 不等於
LSS - 小於
LEQ - 小於或等於
GTR - 大於
GEQ - 大於或等於
選擇開關/i則不區分字符串大小寫;選擇not項,則對判斷結果進行邏輯非。
字符串比較示例:
===============================================
@echo off
set str1=abcd1233
set str2=ABCD1234
if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!)
if /i %str1% LSS %str2% (echo str1^=str2)
echo.
set /p choice=是否顯示當前時間?(y/n)
if /i not %choice% EQU n echo 當前時間是:te% %time%
pause>nul
===============================================
對於最後一個if判斷,當我們輸入n或N時的效果是一樣的,都不會顯示時間。如果我們取消開關/i,則輸入N時,依舊會顯示時間。
另外請注意一下幾個細節:1-echo str1^=str2;2-echo.。


2、存在判斷
存在判斷的功能是判斷文件或文件夾是否存在。其命令格式爲:
IF [NOT] EXIST filename command1 [else command2]
===============================================
@echo off
if exist %0 echo 文件%0是存在的!
if not exist %~df0 (
echo 文件夾%~df0不存在!
) else echo 文件夾%~df0存在!
pause>nul
===============================================
這裏注意幾個地方:
1-存在判斷既可以判斷文件也可以判斷文件夾;
2-%0即代表該批處理的全稱(包括驅動器盤符、路徑、文件名和擴展類型);
3-%~df0是對%0的修正,只保留了其驅動器盤符和路徑,詳情請參考for /?,屬高級批處理範疇;
4-注意if語句的多行書寫,多行書寫要求command1的左括號必須和if在同一行、 else必須和command1的右括號同行、command2的左括號必須與else同行、command1和command2都可以有任意多行,即 command可以是命令集。

3、定義判斷
定義判斷的功能是判斷變量是否存在,即是否已被定義。其命令格式爲:
IF [not] DEFINED variable command1 [else command2]
存在判斷舉例:
===============================================
@echo off
set var=111
if defined var (echo var=%var%) else echo var尚未定義!
set var=
if defined var (echo var=%var%) else echo var尚未定義!
pause>nul
===============================================
對比可知,"set var="可以取消變量,收回變量所佔據的內存空間。

【 for語句(循環結構) 】
for語句可以實現類似於C語言裏面的循環結構,當然for語句的功能要更強大一點,通過不同的開關可以實現更多的功能。for語句有多個開關,不同開關將會實現不同的功能。
1、無開關
無開關的for語句能夠對設定的範圍內進行循環,是最基本的for循環語句。其命令格式爲:
FOR %%variable IN (set) DO command
其中,%%variable是批處理程序裏面的書寫格式,在DOS中書寫爲%variable,即只有一個百分號(%);set就是需要我們設定的循環範圍,類似於C語言裏面的循環變量;do後面的command就是循環所執行的命令,即循環體。
無開關for語句舉例:
===============================================
@echo off
for %%i in (a,"b c",d) do echo %%i
pause>nul
===============================================
2、開關/L
含開關/L的for語句,可以根據set裏面的設置進行循環,從而實現對循環次數的直接控制。其命令格式爲:
FOR /L %%variable IN (start,step,end) DO command
其中,start爲開始計數的初始值,step爲每次遞增的值,end爲結束值。當end小於start時,step需要設置爲負數。
含開關/L的for語句舉例(創建5個文件夾):
===============================================
@echo off
for /l %%i in (1,2,10) do md %%i
pause
===============================================
上例將新建5個文件夾,文件夾名稱依次爲1、3、5、7、9。可以發現,%%i的結束值並非end的值10,而是不大於end的一個數。
3、開關/F
含開關/F的for語句具有最強大的功能,它能夠對字符串進行操作,也能夠對命令的返回值進行操作,還可以訪問硬盤上的ASCII碼文件,比如txt文檔等。其命令格式爲:
FOR /F ["options"] %%variable IN (set) DO command
其中,set爲("string"、'command'、file-set)中的一 個;options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一個或多個的組合。各選 項的意義參見for /f。一般情況下,使用較多的是skip、tokens、delims三個選項。
含開關/F的for語句舉例:
===============================================
@echo off
echo **No Options:
for /f %%a in ("1,2,10") do echo a=%%a
echo **Options tokens ^& delims:
for /f "tokens=1-3 delims=," %%a in ("1,2,10") do echo a=%%a b=%%b c=%%c
pause
===============================================
@echo off
echo 本文件夾裏面的文件有:
for /f "skip=5 tokens=3,4 delims= " %%a in ('dir') do (
if not "%%a"=="

)
pause
===============================================
@echo off
echo 本文件夾裏面的文件有:
>c:/file.txt dir
for /f "skip=5 tokens=3,4 delims= " %%a in (c:/file.txt) do (
if not "%%a"=="

)
del c:/file.txt
pause
===============================================
對於後面的兩個例子,其中options裏面的delims= 是可以刪除的,因爲只要添加了/F開關係統就將delims的值默認爲空格。
同時我們也看到了,for語句的do後面的command也是可以分行的,只需要保證command的左括號和do在同一行就可以了。
4、開關/D或/R
含開關/D或/R的for語句是與目錄或文件有關的命令,一般情況下很少使用。含開關/R的命令有時候被用於通過遍歷文件夾來查找某一個文件或文件夾,故而列舉此例。
含開關/R的for語句舉例(文件夾遍歷):
===============================================
@echo off
setlocal enabledelayedexpansion
FOR /R d: %%i IN (.) DO (
set dd=%%i
set "dd=!dd:~0,-1!"
echo !dd!
)
pause
exit
===============================================
上例即可以羅列出D盤下的所有文件夾,其速度要比命令"tree d:"慢多了,不過其返回結果的實用性則遠遠超過了tree命令。
一般情況下我們不推薦通過遍歷文件夾來查找文件,特別是在查找某些程序(比如QQ.exe)的位置時。推薦通過reg命令查找註冊表來查找QQ的路徑,以保證查找效率。
上例中也出現了幾個新面孔,如setlocal、感嘆號等。其中,感嘆號其實就是變量百分號 (%)的強化版。之所以要用!而不用%,是因爲在for循環中,當一個變量被多次賦值時,%所獲取的僅僅是dd第一次被賦予的值;要想刷新dd的 值,就必須首先通過命令"setlocal enabledelayedexpansion"來開啓延遲變量開關,然後用!dd!來獲取dd的值。
for語句是批處理裏面功能最強大、使用最普遍卻又最難掌握的一套命令,這也是批處理菜鳥和批處理高手最明顯的一個分水嶺,一旦掌握了這套命令,那麼你就離批處理達人不遠了!
@echo off
set var=111
if defined var (echo var=%var%) else echo var尚未定義!
set var=
if defined var (echo var=%var%) else echo var尚未定義!
pause>nul
===============================================
對比可知,"set var="可以取消變量,收回變量所佔據的內存空間。

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