爱问何谓批次档Batch File将多个指令置於同一档案让OS一次执行.docx
- 文档编号:30017706
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:14
- 大小:19.56KB
爱问何谓批次档Batch File将多个指令置於同一档案让OS一次执行.docx
《爱问何谓批次档Batch File将多个指令置於同一档案让OS一次执行.docx》由会员分享,可在线阅读,更多相关《爱问何谓批次档Batch File将多个指令置於同一档案让OS一次执行.docx(14页珍藏版)》请在冰豆网上搜索。
爱问何谓批次档BatchFile将多个指令置於同一档案让OS一次执行
何謂批次檔(BatchFile)?
∙將多個指令置於同一檔案,讓OS一次執行
∙文字格式,由Windows的cmd.exe解讀
∙提供多種指令
o批次指令(cmd.exe提供)
o內部指令(cmd.exe提供)
o外部指令(OS/User提供)
∙版本演進:
DOS->Win9x->Win2000/WinXP
∙優點:
cmd.exe為OS內建,通用、簡單、不用編譯。
特別適用於文字檔處理。
∙缺點:
速度不快、無法撰寫複雜動作
應用面
∙排程定時:
GUI方式、批次檔版本
∙更改IP:
GUI版本、批次版本
∙登入時變換桌面
∙自動收送信
∙自動登入bbs
∙自動ftp下載
∙自動化google查詢
∙自動化MP3壓縮
∙自動備份資料
∙自動化傳送簡訊
∙..............
常用指令
∙萬用字元:
*.exe ?
?
?
?
.bat
∙目錄:
. ..nul
∙cmd的DOS指令
o檔案目錄指令:
dir,copy,del,md,cd,rd...
o導向指令:
|,>, <,>>
∙cmd的批次指令
ofor,if,set,goto,exit,echo...
∙外部指令
o篩選指令:
more,findstr,sort
o常用指令:
telnet、ftp、ping、ipconfig、chkdsk、xcopy....
o其他指令:
開始/說明及支援/搜尋:
"命令列參照"
CMD的DOS指令DEMO
∙啟動cmd.exe
o開始/程式集/執行/輸入cmd.exe
∙建立一個叫mywork的目錄,並將工作目錄轉到mywork
omkdirmywork&cdmywork
∙將c:
\下的目錄列表存成dir.txt。
odir/b/adc:
\>dir.txt
∙尋找c:
\winnt下,所有“setup”字樣的.txt檔(包含子目錄和子子目錄和.....)並排序存到my.txt
odir/sc:
\winnt\setup*.txt|sort>my.txt
∙尋找c:
\winnt\comsetup.log中,有出現“dllhost”的那幾行(不分大小寫)
ofindstr/i"call”c:
\winnt\comsetup.log
∙請用echo在dir.txt後面附加上文字"=目錄列表紀錄="
oecho=目錄列表紀錄=>>dir.txt
∙以my.txt履寫dir.txt(不能有提示符號出現)
ocopy/ymy.txtdir.txt
實作:
備份檔案
∙在c:
\winnt下,把*.txt備份到c:
\backup的目錄下
o要求:
在執行多次的情況下,每次都能執行完畢而無須使用者介入。
∙提示一:
請由"說明及支援"查詢xcopy的用法
∙提示二:
須自行建立好c:
\backup的目錄
CMD的Batch指令
∙可將DOS指令們寫入一文字batch檔,並利用batch指令加強其功能
o可執行重覆動作,簡化手動工作
oEX.backup.bat
∙處處可使用
o只要有Windows即可使用
o語法和指令都比C/Java和其他語言都簡單
o撰寫時間短
systemroot
username
var1
......
cmd.exe
my_1.bat
systemroot
username
var2
......
cmd.exe
my_2.bat
批次檔格式
∙單純的文字檔。
∙將重覆指令整合為一個檔案。
∙以.bat或.cmd作為副檔名
mkdirmywork&cdmywork
dir/b/adc:
\>dir.txt
dir/sc:
\winnt\setup*.txt|sort>my.txt
findstr/i"call”c:
\winnt\comsetup.log
echo=目錄列表紀錄=>>dir.txt
copy/ymy.txtdir.txt
demo.bat
批次指令:
基本顯示
∙顯示字串:
echo
o秀出hihi的字樣:
echohihi
o關閉指令的顯示,但仍可顯示字樣:
@echohihi
o關閉此後所有指令的顯示:
@echooff
o開始此後所有指令的顯示:
@echoon
∙註解
orem
∙標號
o:
o配合goto時使用
批次指令:
變數
∙環境變數操作
o一般用法:
setvar=henry
o讀取var變數:
echo%var%
o顯示目前全部變數:
set
o數值運算:
set/avar=3*2
o使用者指定:
set/pvar=Pleasewritesomething:
∙特殊系統變數:
%windir%%cd%%date%%systemroot%%username%...
∙設定區域變數:
setlocal/endlocal
windir
username
var
......
cmd.exe
my.bat
Setlocal/endlocal範例
calldemo.bat
echo%id%
output:
oct
setid=oct
calldemo.bat
echo%id%
output:
%id%
setlocal
setid=oct
endlocal
批次指令:
流程控制
∙if,else
oif%NUMBER_OF_PROCESSORS%==1echoyou'veonlyoneprocessor
oifnot"%OS%"==""@echoyourosis%os%
oif"%abc%"==""(echonothing)else(echoyes)
▪Howaboutif"%abc%"==""echonothingelse(echoyes)
oif/i"a"=="A"echoaisthesameasA
∙跳至:
goto:
label
∙暫停:
pause
Example
:
startpoint
setchoice=2
if%choice%==1(
dir/w
)elseif%choice%==2(
typec:
\boot.ini
)else(
goto:
startpoint
)
:
What'stheresult?
實作:
選單系統
Whatdoyouwant(1/2/3/4)?
1.列出本台電腦windows目錄下,所有S開頭的子目錄。
2.找出windows\system32\eula.txt中,所有含Microsoft的文字行,排序後分頁輸出顯示。
3.再來一次
4.離開。
要求:
畫面不能出現batch檔中的code
批次指令:
特殊字元
∙括號:
(.....)
∙pipe:
|
∙導向:
> >> <
∙特殊字元避開:
o&()[]{}^=;!
'+,`~加""表示為純字元,失去特殊意義
o&<>()@^|加^表示為自身字元,失去特殊意義
∙注意:
batch檔中把%視為特殊字元
o要使用%的字元者,要寫成%%才行
o指令列中的%i,在Batch中要寫成%%i
o指令列中的3%2,在Batch中要寫成3%%2
批次指令:
For
∙重覆性處理
ofor%iin(monkeydogmonkey)do@echoIlove%i
∙顯示目錄中的特定檔案
ofor%jin(%windir%\*.txt)dotype%j
∙從1顯示到100
ofor/L%iin(1,1,100)doecho%i
∙列出目前所有的目錄
ofor/D%iin(*)doecho%i
For/f的使用!
!
!
∙將指定文檔逐行顯示
ofor/f%iin(%windir%\system32\eula.txt)do@echo%i
∙剖析文字檔,抓出第2、3個區塊
ofor/f“delims=,tokens=3,7"%iin(%windir%\svcpack.log)do@echo%i%j
∙剖析字串
ofor/f"tokens=1,2,3,4"%iin("mynameisjtchen")do@echoyour%jis%l,welcome!
!
∙將執行結果視為文檔,進行剖析
ofor/F%iin('dir/b/ad')doecho%i
o如果不要剖析呢?
?
(即希望整行輸出)
∙剖析輸出:
秀出目前的環境變數
ofor/f"delims==tokens=1"%ain('set')do@echo%a
實作
∙請以批次檔實作多重目錄
opme-1
opme-2
o........
opme-100
∙請以批次檔迴圈改變目錄名稱
opme-2005-1
opme-2005-2
o................
opme-2005-100
批次指令:
%變數使用
∙for變數
o取出%i的檔名:
%~ni
o取出%i的時間:
%~ti
∙指令列參數的變數延伸:
o取出第2參數的絕對路徑:
%~f2
o可用的變數延伸列表,請見for/?
∙環境變數延伸:
o字串範圍擷取:
%username:
~m,n%,其中m表起始位位置,n表長度且n可為負數。
o字串取代:
%date:
a=b%將date字串中的a全部以b取代
o詳情請見set/?
%i的變數延伸示範
for%iin(%windir%\system32\eula.txt)do(
echoThefilenameis%~nxi
echoThefullpathoffileis%~fi
echoThecreatetimeof fileis%~ti
echoThesizeoffileis%~zi
)
變數的字串處理示範
setname=nthu
setname=pme2003
echo%name:
2003=2004%
echothedepartmentis%name:
~1,-4%
echotheyearis%name:
~4,7%
echotheyearis%name:
~4%
實作
∙將c:
\winnt\*.logcopy到c:
\work目錄下,將檔名加上目前的時間(如16:
26:
36.34,下午4點26分36.34秒)
o原檔名:
wsdu.log
o新檔名:
16.26.36.34-wsdu.log
∙提示:
o使用特殊環境變數%date%
o使用變數的字串取代的功能
批次指令:
指令列參數的引用
∙傳參數進入批次檔的三種方法
o指令列參數:
%0,%1,...%9
o於呼叫前設定環境變數=>不佳
∙指令列參數相關指令:
o指令列全部參數:
%*
o遞移:
▪Shift結果:
%0->%1,%1->%2
▪Shift/2結果:
%1->%1 %2->%3
oWhentouse?
▪對檔案/目錄按右鍵的"傳送到"功能
示範
∙實作一demo.bat如下
oechoyouselectadirectory/filecalled%1
opause
∙copydemo.bat到%userprofile%\sendto的目錄下
ocopydemo.bat%userprofile%\sendto
∙對任意檔案/目錄按右鍵選傳送到/demo.bat,測試結果
批次指令:
立即展開和延遲展開
∙預先展開:
%var%
∙延後展開:
!
var!
∙為何延後展開
o有些變數的變動性大,必須在使用的前一刻才能確定
∙啟動延遲展開的方法
o在batch檔中以指令啟動
▪setlocalenabledelayedexpansion
o在系統登錄檔中修改設定
▪HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CommandProcessor\DelayedExpansion的DWORD為1
∙Win2000/WinXP預設是有啟動延遲展開的
立即/延遲展開的差異
setid=sep
(
echo%id%
setid=oct
echo!
id!
)
setid=jt
(
echo%id%
setid=oct
echo!
id!
)
setid=jt
(
echojt
setid=oct
echo!
id!
)
setid=jt
(
echojt
setid=oct
echo!
id!
)
setid=jt
(
echojt
setid=oct
echo!
id!
)
輸出:
sep oct
立即/延遲展開的示範程式
∙Ex1,
osetLIST=
ofor/L%iin(1,1,5)dosetLIST=%LIST% %i
oecho%LIST%
∙Ex2,
osetlocalenabledelayedexpansion
osetLIST=
ofor/L%%iin(1,1,5)dosetLIST=!
LIST!
%%i
oecho%LIST%
實作一
∙將c:
\winnt\*.logcopy到c:
\work目錄下,並進行唯一的編號,如
o要求
▪原檔名:
wsdu.log
▪新檔名:
1-wsdu.log
o提示
▪請善用set/a的指令
▪請使用延遲展開
實作二
∙請實作一批次檔,可利用"傳送到"對任一檔案(如%windir%\system32\eula.txt)進行字串處理
∙要求
o將所有出現microsoft的字樣改為pmesoft。
注意不區分大小寫
o將新的結果輸出到c:
\word\eula_new.txt
o原先的字樣:
MICROSOFT軟體使用者授權合約
o處理後字樣:
PMESOFT軟體使用者授權合約
∙提示
o使用前面demo的"傳送到"功能
o使用變數的字串取代功能
o送用轉向輸出的功能>
空格号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 爱问何谓批次档Batch File 将多个指令置於同一档案让OS一次执行 何谓 批次 Batch 将多个 指令 同一 档案 OS 一次 执行