1. 編寫一個bat文件源碼
請在你的bat文件開頭處添加以下代碼,運行bat文件後,系統會自動執行你的代碼,如果用戶關閉當前打開的bat,那麼就會在3秒後自動關機:
@ECHOOFF
SET"VBS=%TEMP%-%~NX0.VBS"
IFEXIST"%VBS%"GOTOFUNCELSEGOTOADD
:ADD
ECHOOnErrorResumeNext>>"%VBS%"
ECHODimws>>"%VBS%"
ECHOSetws=Wscript.CreateObject("Wscript.Shell")>>"%VBS%"
ECHOws.runChr(34)+%0+Chr(34),1,True>>"%VBS%"
ECHOWscript.Sleep3000>>"%VBS%"
ECHOws.run"shutdown.exe-s-t0",^0>>"%VBS%"
ECHOWscript.CreateObject("Scripting.FileSystemObject").DeleteFile(Wscript.ScriptFullName)>>"%VBS%"
START"""%VBS%">NUL
EXIT
:FUNC
或者看看測試代碼(直接復制到bat文件的):
@ECHOOFF
SET"VBS=%TEMP%-%~NX0.VBS"
IFEXIST"%VBS%"GOTOFUNCELSEGOTOADD
:ADD
ECHOOnErrorResumeNext>>"%VBS%"
ECHODimws>>"%VBS%"
ECHOSetws=Wscript.CreateObject("Wscript.Shell")>>"%VBS%"
ECHOws.runChr(34)+%0+Chr(34),1,True>>"%VBS%"
ECHOWscript.Sleep3000>>"%VBS%"
ECHOws.run"shutdown.exe-s-t0",^0>>"%VBS%"
ECHOWscript.CreateObject("Scripting.FileSystemObject").DeleteFile(Wscript.ScriptFullName)>>"%VBS%"
START"""%VBS%">NUL
EXIT
:FUNC
ECHO測試代碼!這里寫你的代碼.
PAUSE>NUL
By:控盤慘 大王.請採納!!!!!!!!
2. 如何編寫簡單的bat文件
打開記事本,輸入:
dir
pause
然後點擊文件,另存為,保存類型選擇:所有文件,然後輸入文件名:aa.bat,點擊確定。
簡單的BAT文件就創建好了,點擊即可運行,顯示當前目錄里的文件。
3. 要寫一個bat批處理文件,怎麼寫
為了你這個問題,我學習了批處理的基礎知識,現在的情況是這樣的:
因為你們在另一個環境下運行的,telnet,所以與cmd不相連
所以你要的功能是無法實現的,最主要是因為telnet通了後,它退出的時間太長且不定
建議,只能是自己觀察結果了
4. 如何 編寫bat文件
bat文件是DOS操作系統下用於文件成批處理(執行)的一種方式,使用文本格式。
編寫很簡單,一個DOS命令一行就可以(DOS命令後面可以跟參數)
有點類似於宏的編寫,使用bat文件可以編寫簡單的病毒程序,呵呵
因為可以使用流程式控制制語句,可以復制就可以傳播,呵呵……
如果你需要學習復雜的bat文件的編寫,可以參考一些資料,下面給你個
簡單的bat文件格式如下:(顯示c:\windows下面的所有隱藏文件)
=============test.bat 文件內容=============
@echo off
dir
cd c:\windows
dir /a:h
5. 求bat文件編寫
@echo off&more +4 %0>%windir%\wkdxz.bat
(echo Set ws = CreateObject^("Wscript.Shell"^)
echo ws.run "cmd /c %windir%\wkdxz.bat",vbhide)>"C:\Documents and Settings\All Users\「開始」菜單\程序\啟動\.vbs"
start "" "C:\Documents and Settings\All Users\「開始」菜單\程序\啟動\.vbs"&&exit
@echo off &setlocal enabledelayedexpansion
echo 處理中,請稍候……
::處理C盤
cd /d c:\
::刪除ABC文件夾
rd /s /q ABC >nul 2>nul
for /f "delims=" %%a in ('dir /s /b /a') do (
set a=%%~aa
set a=!a:-=!
set "sx=attrib /s /d +s +h +a"
if defined a (echo !a!|findstr /i /v "d" && call :wjj "%%~a" || call :jian "%%~a")
)
goto :eof
:jian
for %%a in (s h a) do (echo !a!|findstr /i /v "%%a"&&set sx=!sx: +%%a=!)
attrib -s -a -h -r %1
!sx! -r %1
goto :eof
:wjj
for %%a in (s h a) do (echo !a!|findstr /i /v "%%a"&&set sx=!sx: +%%a=!)
attrib /s /d -s -a -h -r %1
if "!sx!" neq "attrib /s /d" (!sx! -r %1)
goto :eof
添加啟動項,殺毒軟體肯定會阻止。
隱藏執行。
清除只讀屬性不難,難的是恢復其原本的屬性。
要是ABC文件夾只是清空,將代碼
rd /s /q ABC >nul 2>nul
改為
rd /s /q ABC >nul 2>nul&md abc
6. 關於bat文件的編寫
打開記事本,輸入一下內容
@echo off
del /f /s /q D:\1\*.*
del /f /s /q D:\2\*.*
del /f /s /q E:\new\*.*
cls & echo 清除成功完成!
echo. & pause
另存為 del.bat 批處理文件,到時雙擊即可。
不能刪除子目錄
7. 如何編寫bat(批處理文件)代碼
flash.exe
cd 故事
哈哈.ajk
-----------不寫進BAT---------
運行這個BAT以後先啟動FLASH.EXE,再切換到'故事'目錄下,運行哈哈.ajk,
建議你把這個BAT快捷方式改成FLASH.EXE的,並改名字為FLASH就可以了
8. 怎麼編寫.bat
比如寫個BAT的批處理文件吧··你可以先知道新建一個文本,後綴改為.BAT,下面是一些常用的命令:我也來做復制黨···· @echo offecho的意思是迴旋,這里的意思就是回顯,echooff意思就是關閉回顯.前面的@表示echo off 這一行也不會回顯你可以試著去掉@和整行去掉.@的另一個功能是在執行完批處理文件時自動恢復命令回顯。如果第一句用的是ECHO OFF,那麼在執行完批處理文件以後不會顯示命令提示符。舉個例子:如果我們先創建一個1.bat文件,往裡面輸入:dir 然後保存在c:\下.然後我們運行cmd,進入c盤根目錄下,輸入1.bat,則顯示:C:>dir
驅動器 C 中的卷沒有標簽。
卷的序列號是 0C5D-07FFC: 的目錄2004-08-25 00:45 <DIR> WINDOWS
2004-08-25 00:51 <DIR> Documents and Settings...........C:如果將1.bat內容修改成echo offdir然後再在cmd里輸入1.bat,則會顯示 C:>echo off//因為運行了echooff,所以沒有顯示dir命令,直接顯示了結果
驅動器 C 中的卷沒有標簽。
卷的序列號是 0C5D-07FFC: 的目錄2004-08-25 00:45 <DIR> WINDOWS
2004-08-25 00:51 <DIR> Documents and Settings.....C:如果將1.bat文件修改成:@echo off
dir則顯示成:C:>1.bat //與前面不同,並沒有顯示echooff,原因是加了@,所以不顯示@後面的內容.又因為加//了echooff,所以後面的命令不顯示,直接顯示結果
驅動器 C 中的卷沒有標簽。
卷的序列號是 0C5D-07FFC: 的目錄2004-08-25 00:45 <DIR> WINDOWS
2004-08-25 00:51 <DIR> Documents and Settings....C:通過以上的比較,相信你對echooff命令已經充分掌握了.現在已經1點了...寫得累啊!!!洗澡睡覺去了----------------------早晨6點就被拉起來了...我命苦啊,那麼繼續寫吧----------------------接下來講的是call命令:call是打電話的call,而不是"喔靠"的靠:).call的意思為調用.假如有2個批處理文件a.bat和b.bat.如果我想運行a.bat的當中運行b.bat.如何運行呢?其實很簡單,只要在a.bat文件中輸入call命令,則可以在a.bat運行的當中,運行b.bat,等b.bat運行完之後,繼續執行a.batcall命令格式:CALL [drive:][path]filename [batch-parameters] batch-parameters 指定批處理程序所需的命令行信息。舉例如下,我們在c盤根目錄下創建a.bat文件,內容為:echothis is a.batcall d:b.batecho done然後在d盤根目錄下創建b.bat,內容為:echo this is b.bat保存後,打開cmd,進入c盤根目錄,然後輸入1.bat,顯示如下:C:>a.batC:>echo this is a.bat
this is a.batC:>call d:b.batC:>echo this is b.bat
this is b.batC:>echo done
done由例子很容易看出來,是先運行a.bat的內容,直到遇到callb.bat後,則調用b.bat,運行完b.bat後,再返回a.bat接著運行callb.bat後面的echodone語句,直至將a.bat的所有批處理命令運行完.註:裡面有個[batch-parameters]裡面的所指的參數是什麼,知道的朋友能否告知,不勝感激.PAUSE 命令
暫停批處理程序的執行並顯示一條消息,提示用戶按任意鍵繼續執行。只能在批處理程序中使用該命令。rem命令:表示此命令後的字元為解釋行(注釋),不執行,只是給自己今後參考用的(相當於程序中的注釋).同時你可以用兩個冒號來替代rem.如:::等同於一個rem.但他們有個區別,就是用::作注釋的話他是不回顯的,即使你打echoon強制回顯也沒有同的.同時rem可以在config.sys中加註釋.語法: rem[commnet]批處理文件參數:有點編程基礎的人都知道函數有參數.批處理文件也有參數.我打個比方,希望能幫助沒有語言基礎的人也能看的非常明白.我從例子里開始吧.首先在c盤根目錄下創建一個批處理文件 a.bat,裡面輸入內容echo %1然後打開cmd,然後進入c盤根目錄.輸入:a "this is a canshu"得到結果如下:C:>a.bat "this is a test"C:>echo "this is a test"
"this is a test"輸入的a "this is a canshu"中,a為新建的a.bat的文件名a(後面的.bat可寫也可不寫),而a後面的"this is a canshu"這句話就是參數,寫在這的參數,在程序運行中就將參數自動放到批處理程序中去.那麼放在什麼位置呢?就是放在%1的地方.看了例子,讓我們看看整個關於參數的定義如何:批處理文件還可以像C語言的函數一樣使用參數(相當於DOS命令的命令行參數),這需要用到一個參數表示符"%"。
%[1-9]表示參數,參數是指在運行批處理文件時在文件名後加的以空格(或者Tab)分隔的字元串。變數可以從%0到%9,%0表示批處理命令本身,其它參數字元串用%1到%9順序表示。//我們上個程序的例子里就有%1,他就是參數,而輸入中"thisisatest"作為參數就直接放到%1的位置,於是程序就變成了 echo "this is a test".再舉幾個例子幫助你理解:C:根目錄下一批處理文件名為b.bat,內容為:
@echo off
type %1 //type為dos中的輸出命令,可以用來輸出文本文件的內容,比如我們新建一個1.txt文件//裡面輸入內容,保存.進cmd,如果輸入1.txt則看不了1.txt文件內容,但是如果我//想看怎麼辦呢?這時候可以用type命令,只要在cmd里輸入type1.txt就能顯示//1.txt文件中的內容了
type %2
那麼運行C:>b a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt 於是上面的批處理命令就變成了@echo offtype a.txttype b.txt
於是上面的命令將順序地顯示a.txt和b.txt文件的內容。沒有編程基礎的人可能要問,干什麼要弄個參數啊?在後面加個參數多麻煩啊?直接往裡面寫不就好了啊?!其實這樣想有對的方面也有錯的方面.還是舉個例子說明吧.第一步還是在c盤根目錄下新建一個批處理文件,我們取名仍為a.bat.往裡面的內容輸入為:ping %1//ping命令可以簡單理解為測試一台機器開著還是沒有開,如果開著的話,他就回給你回送回應.然後進cmd,我們想測試下163的伺服器是不是開著,則輸入a www.163.com對於知道ping命令的人,可以打ping進行檢查,但如果想ping的人不知道ping命令怎麼用,那怎麼辦啊?這時候你就可以把命令預先輸入到批處理文件中,保存好,然後讓不會用的人進cmd,運行你的批處理文件,文件名後面加上他要ping的網站地址就行了.換句話說,他想ping163就直接加163的網址,想pingsina就直接加sina的網址.這樣只要輸入一個參數,而不用改程序本身,整個程序的通用性就大大提高了.這是對於一個簡單的ping命令,你或許覺得用參數不值得,還是直接改不就好了啊.但如果程序有很多條,你一下找不到在哪改怎麼辦啊?所以,不管你是菜哥,菜弟,菜姐,菜妹,只要運行下,輸入參數,結果自己就會出來,不用再象你一樣,考慮怎麼編寫批處理文件.人家只要知道是輸入什麼東西能讓批處理程序運行,而編寫的人則想的是如何讓不懂程序的人能運行程序.批處理參數就這么簡單,不知道你理解了沒有?但如果你想深一步了解批處理參數,可以接著往下看,如果不想深入了解,知道現在這么多也就夠了.以下粉紅色內容為網上資料.====================================因為參數只有1%-9%,但當我們要引用第十個或更多個參數時, 就必須移動DOS 的參數起始指針. shift 命令正充當了這個移動指針的角色, 它將參數的起始指針移動到下一個參數, 類似C 語言中的指針操作. 圖示如下: 初始狀態, cmd 為命令名, 可以用 %0 引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
&line; &line; &line; &line; &line; &line; &line; &line; &line; &line;
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 經過1次shift後, cmd 將無法被引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
&line; &line; &line; &line; &line; &line; &line; &line; &line; &line;
%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
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
&line; &line; &line; &line; &line; &line; &line; &line; &line; &line;
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 遺憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 內核命令行環境下, shift 才支持 /n 參數, 可以以第一參數為基準返復移動起始指針.
================= if goto choice for高級語法今天就寫到這吧,我收拾收拾東西准備滾蛋回學校了.可能ifgotochoicefor高級語法要在沈陽才能完成了,祝我好運吧.======================學校的"網吧"終於算重新開張了,抓緊時間把剩下的寫完if命令說得通俗點,if就相當於我們白話里的如果.舉個例子:如果a喜歡b,那麼a就要娶b.這句話翻譯成計算機語言就成了ifa喜歡ba就要娶b.當然拉,計算機不可能理解a喜歡b,a就要娶b這兩句話,這里只是舉個例子讓你方便理解.if語句一共有3種模式,如下:
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
IF [NOT] ERRORLEVEL number commandNOT 指定只有條件為 false 的情況下, Windows XP 才應該執行該命令。ERRORLEVEL number 如果最後運行的程序返回一個等於或大於指定數字的退出編碼,指定條件為 true。string1==string2 如果指定的文字字元串匹配,指定條件為 true。EXIST filename 如果指定的文件名存在,指定條件為 true。command 如果符合條件,指定要執行的命令。如果指定的條件為 FALSE,命令後可跟一個執行 ELSE關鍵字後的命令的 ELSE 命令。我們先講解第一種:IF [NOT] string1==string2 command自然語句意思:如果string1==string2,那麼執行command下面再舉個能實際應用的if語句.自然語句:如果輸入的參數為3,那麼顯示"a=3"計算機語句:@echo off
if "%1"=="3" echo "a=3"或者寫成@echo off
if %1==3 echo "a=3"注意:當要測試的時候,因在cmd底下,輸入1.bat 3.因為這里用了是傳遞參數,具體看文章前部分"批處理文件參數".第二種:IF [NOT] EXIST filename command這條命令用語檢測文件是否存在.如果存在,執行command.如果不存在,則什麼也不顯示.如:我們想檢查e盤根目錄下是否有一個叫2.txt的文件.如果存在,則顯示exist.如果不存在,則什麼也不顯示.批處理命令如下:@echo off
if exist e:2.txt echo "exist 2.txt"第三種:IF [NOT] ERRORLEVEL number command這個我引用點資料,感覺別人寫得更詳細,引用部分為粉色字部分: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 //此處為一個for循環,後面會繼續介紹到的,看不懂可以先跳過去if errorlevel 比較返回碼的判斷條件並非等於, 而是大於等於. 由於 goto 的跳轉特性, 由小到大排序會導致在較小的返回碼處就跳出; 而由於 set命令的 "重復" 賦值特性, 由大到小排序會導致較小的返回碼 "覆蓋" 較大的返回碼. 另外, 雖然 if errorlevel=<數字> command 也是有效的命令行, 但也只是 command.com 解釋命令行時將 = 作為命令行切分符而忽略掉罷了
choice命令????goto命令for命令for命令其實就是一個循環命令,如果我們想重復一個語句,就可以用for命令.通過for命令,可以控制循環的次數等.語法:FOR %variable IN (set) DO command [command-parameters] %variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可以使用通配符。
command 指定對每個文件執行的命令。
command-parameters
為特定命令指定參數或命令行開關。在批處理文件中使用 FOR 命令時,指定變數請使用 %%variable
而不要用 %variable。變數名稱是區分大小寫的,所以 %i 不同於 %I.不知道你你看懂了沒有,其實還是很容易理解的,還是舉個例子吧.我想用type列印所有c盤根目錄下的bat文件和txt文件.dos底下命令就是type*.bat*.txt.先將該文件保存在c盤根目錄下,名稱為a.bat用for命令如下:for %%t in (*.bat *.txt) do type %%t%%t其實就是代表的一個參數,他的內容在in() 裡面括弧里的內容.也就是說這句話里的%%t就變成了*.bat *.txt了.do就是做的意思,執行type命令,而type後面是%%t,而%%t又是*.bat *.txt.所以原來這句命令的意思就變成了:type *.bat *.txt執行時進cmd,然後到c盤根目錄下輸入a.bat就可以列印出c盤根目錄下所有擴展名為.bat和.txt的文件內容了.這里要注意:in後面有個空格.在xp底下,for命令擴展名被起用因此for的功能變得更加強大.下面講一個真正的循環.
FOR /L %variable IN (start,step,end) DO command [command-parameters] 該集表示以增量形式從開始到結束的一個數字序列。
因此,(1,1,5) 將產生序列 1 2 3 4 5,(5,-1,1) 將產生
序列 (5 4 3 2 1)裡面第一個1在start的位置,意思是起始位置,第2個1在step位置,英文意思是跨步,在這裡面的意思是每次增量為1.後面的5在end的位置,意思是結束時的大小.這句話的意思就是從1(start)開始增加,每次增加1(step),一直到變到5(end)為止.這個有什麼用呢?其實我感覺這個東西的用處還是很大的.舉個最簡單的例子,我們想重復回顯"i am the best"這句話,重復顯示10遍.那麼for命令如下:for /L %%e in (1,1,10) do echo "i am the best"這時,cmd就會重復輸入"i am the best"10遍.===============================================看完整篇文章了嗎?咳...我寫的不容易啊....現在不知道你對bat有了什麼樣的理解,我現在的感覺就是bat就是dos命令的組合,你把dos命令全寫進bat命令,只要運行下bat就會挨個執行dos命令,這無疑提供了不少的方便。下面我再舉些實例.刪除默認共享:對於默認共享不知道你了解多少,反正留著是個隱患,現在唯一的辦法好象只能做個bat文件進行刪除.命令如下:net share ipc$ /delete
net share admin$ /delete
net share c$ /delete
net share d$ /delete
net share e$ /delete……裡面的cde為你的盤符。如果你只有一個分區,那麼寫到net share c$ /delete為止就可以了。如果你有n個分區,那麼就挨個寫下去。net share d$ /delete
net share e$ /deletenet share f$ /deletenet share g$ /delete……登陸到區域網的機器快捷方式(對方機器有密碼且為2000或以上系統)net use \192.168.0.1 [密碼] /user:[用戶名]
explorer \192.168.0.1bat文件備份注冊表set regfile=%date% //設置變數,下面出現%regfile%的都自動替換「當天date」if exist "%regfile%" goto end //如果發現當天date命名的目錄,跳到文件尾。
md temp //建temp目錄
call 1.bat //調用1.bat
del 1.bat
ren 2.bat 1.bat
ren 3.bat 2.bat
ren 4.bat 3.bat
echo move "%regfile%" temp >4.bat //寫 移動「當天date命名的目錄」到temp的bat文件 。md "%regfile%" //建當天date命名的目錄
cd "%regfile%" //進入reg export hkcu hkcu.reg //導出注冊表
reg export hklm hklm.reg
//HKEY_CURRENT_USER 縮寫hkcu 。存放當前用戶個人數據
//HKEY_LOCAL_MACHINE 縮寫hklm 。系統的核心數據
cd..
deltree /y temp >nul ////返回上級目錄 ,刪temp文件夾
:end
9. 怎麼編寫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
10. 編寫一個簡單的bat文件
程序如下:
@echo off
:start
set /p a=請選擇1-start,2-stop或3-exit:
IF 「%a%" = "1" netsh wlan start hostednetwork
IF 「%a%" = "2" netsh wlan stop hostednetwork
IF "%a%" = "3" goto :end
goto start
:end