免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
深入淺出Windows BATCH

1.什么是Windows BATCH

BATCH也就是批處理文件,有時(shí)簡(jiǎn)稱為BAT,是Windows平臺(tái)上的一種可執(zhí)行腳本,與*nix(Linux和Unix)上的Shell腳本和其他的腳本(Perl,Python)等是一樣的,實(shí)質(zhì)上就是一個(gè)文本文件,但是用特定的軟件去解釋的時(shí)候,就變成了可執(zhí)行腳本。在Windows上,可執(zhí)行腳本就是BATCH文件,也叫批處理文件,這是從DOS時(shí)代遺留下來(lái)的名字,意思就是把很多命令放到一起來(lái)執(zhí)行。它的擴(kuò)展名是*.bat,雙擊便可直接運(yùn)行,在命令行(CMD或叫做命令提示符)下面也可以當(dāng)作一個(gè)命令來(lái)運(yùn)行。因?yàn)檫@是Windows支持的東西,所以只能在Windows平臺(tái)使用。(特殊情況除外,不要鉆牛角尖,沒(méi)意思的)。比如著名的Windows垃圾清理小工具就是一個(gè)BAT批處理文件。

2. 為什么需要BAT

歸根結(jié)底是為了提高工作效率。這個(gè)解釋起來(lái)比較費(fèi)勁,因?yàn)樵贕UI大行其道的今天,再提命令行,很多人會(huì)不熟悉,或者認(rèn)為這是倒退。但是眾多關(guān)于提高工作效率的書籍都會(huì)提到命令行可以大大的提高效率,因?yàn)槊羁梢苑奖愕闹苯訉懧窂?,而不用在文件瀏覽器中一層一層的打開(kāi),和命令行可以把命令組合起來(lái),也就是把不同的命令組合起來(lái)來(lái)完成一個(gè)任務(wù),而不用打開(kāi)多個(gè)GUI窗口來(lái)做(甚至很多時(shí)候GUI窗口都是無(wú)法完成的)。對(duì)于這點(diǎn)*nix的程序猿們應(yīng)該最有體會(huì),真正的*nix高手是不會(huì)離開(kāi)命令行的。他們的工作只需打開(kāi)一個(gè)Terminal(命令行),編輯用Vim,其他全都用命令行的工具來(lái)完成,甚至他們都不用鼠標(biāo)!
Windows的CMD沒(méi)有*nix的Terminal那么強(qiáng)大,所以完全在其內(nèi)做開(kāi)發(fā)有點(diǎn)不切實(shí)際,雖然有很多工具可以讓CMD變得強(qiáng)大些,但是還是無(wú)法達(dá)到*nix那樣的地步,因?yàn)樗鼈儚母旧暇褪亲叩牟煌穆肪€*nix是為了開(kāi)發(fā)人員準(zhǔn)備的,而Windows是為了普通大眾準(zhǔn)備的。
再說(shuō)的具體一點(diǎn)就是為了DRY和Automation,也就是說(shuō)讓計(jì)算機(jī)幫你完成一些機(jī)械重復(fù)性的工作任務(wù)(對(duì)于DRY和Automation可以參考《The Productive Programmer》和《Pragmatic Programmer》)。因?yàn)锽AT可以組合命令,所以某個(gè)操作需要超過(guò)一個(gè)命令,或者參數(shù)較多時(shí),或者路徑較長(zhǎng)時(shí),就可以把它寫成BAT,變成一個(gè)簡(jiǎn)單的命令,一次二個(gè)可能沒(méi)感覺(jué),但是當(dāng)天天都用時(shí),就省去了大量的Typing。舉個(gè)例子,比如我要經(jīng)常性的在手機(jī)上抓取Tcpdump,然后查看,通常要用到如下的命令:

  1. D:\>adb shell tcpdump -p -s 0 -i any -w /sdcard/capture.pcap  
  2. D:\>adb pull /sdcard/capture.pcap .  
然后再用Wireshark去查看這個(gè)文件。如果一個(gè)一個(gè)的去敲的話,容易寫錯(cuò),通常要試幾次才能成功。但是如果寫一個(gè)BAT腳本的話:
  1. ::tcpdump.bat  
  2. @echo off  
  3. set dir=/sdcard  
  4. set file=capture.pcap  
  5. adb shell rm -r %dir%/%file%  
  6. adb shell tcpdump -p -s 0 -i any -w %dir%/%file%  
  7. @echo on  
  8. ::gettcpdump.bat  
  9. @echo off  
  10. set dir=/sdcard  
  11. set file=capture.pcap  
  12. set wireshark="C:\Program Files\Wireshark\Wireshark.exe"  
  13. del /q %file%  
  14. adb remount  
  15. adb pull %dir%/%file% .  
  16. %wireshark% %file%  
  17. @echo on  
第一個(gè)腳本tcpdump.bat是抓取,第二個(gè)腳本是查看所抓取的數(shù)據(jù),我每次只需運(yùn)行這二個(gè)命令就可以輕松的查看:
  1. D:\>tcpdump  
  2. Press Ctrl-C to stop capturing  
  3. D:\>gettcpdump  
之后Wireshark就會(huì)把所抓取的數(shù)據(jù)打開(kāi),直接看就行了。

3. 哪里可以用到BAT

任何需要重復(fù)做的事情都可以嘗試用腳本來(lái)完成。比如,每天的版本更新,拷貝文件,每天都使用的命令等等。如前面所說(shuō)的,只要某些事情你超過(guò)第二次做,或者每天都做幾十次,就應(yīng)該考慮用BAT?;蛘?,某些命令很復(fù)雜,也要使用BAT,即使把二個(gè)簡(jiǎn)單命令合成一個(gè)BAT也是值得的。比如,調(diào)試的時(shí)候要查看手機(jī)內(nèi)的數(shù)據(jù),就可以用腳本來(lái)完成:

  1. ::getmmsdb.bat  
  2. @echo off  
  3. set datadir=/data/data/com.android.providers.telephony/databases  
  4. set mmsdb=mmssms.db  
  5. del /q %mmsdb%  
  6. adb remount  
  7. adb pull %datadir%/%mmsdb% .  
  8. sqlite3 %mmsdb%  
  9. @echo on  
因?yàn)锽AT中可以寫任何可以在CMD命令行中運(yùn)行的命令,另外,很多應(yīng)用程序也提供了命令版本,比如WinRAR,如果你需要從某個(gè)地方拷貝東西并解壓,就可以用BAT:
  1. ::copyversion.bat  
  2. @echo off  
  3. del /q stable.rar  
  4. set winrar="C:\Program Files\WinRAR\WinRAR.exe"  
  5. copy /y \\192.168.0.1\version\release\stable.rar .  
  6. %winrar% x stable.rar  
  7. @echo on  
不管怎么樣,這都比手動(dòng)去做要來(lái)的方便。
另外就是*nix上面的很多實(shí)用命令行程序都有了Windows的版本,比如Subversion,它有一個(gè)版本就是專門用于命令行的,所以把所安裝的軟件與內(nèi)置的一些命令組合起來(lái),可以創(chuàng)造出很強(qiáng)大的Automation的工具。
還有一點(diǎn)就是第三方工具的拓展,Windows本身的內(nèi)置命令很少,但是有第三方的工具來(lái)拓展它比如PowerShell等,加之這些工具,可以讓程序員的工具箱更加的豐富和強(qiáng)大。
其實(shí),這里最關(guān)鍵的地方不在BAT,或者你是否會(huì)寫這樣的腳本,而是在于你能否意識(shí)到BAT腳本可以替代手工??梢宰x一讀《The Productive Programmer》和《Pragmatic Programmer》來(lái)獲取點(diǎn)靈感。

4. 如何使用BAT

BAT是一個(gè)可執(zhí)行腳本,也就是說(shuō)它跟一個(gè)*.exe可執(zhí)行程序一樣,只要雙擊它就可以執(zhí)行了。另外的方式就是通過(guò)CMD在命令行中啟動(dòng)它,但需要給出它的路徑,也就是說(shuō)要讓解釋程序能找到它,所以推薦的做法是把所寫的BAT收集整理到一個(gè)文件夾中,然后把這個(gè)文件放到系統(tǒng)的環(huán)境變量PATH中去,這樣就可以在任何的路徑中使用了。
如,我的配置是這樣的,把所有的BAT放在D:\work\bin下面,然后把D:\work\bin加到Path變量中去。
添加環(huán)境變量的方法是右擊"我的電腦"-->"屬性"-->"高級(jí)"-->環(huán)境變量-->在用戶變量中編輯Path(如果沒(méi)有就新加一個(gè))然后把D:\work\bin加入其中,與其他的路徑用分號(hào);分隔。之后就可以像運(yùn)行內(nèi)置命令一樣來(lái)運(yùn)行它了。(如果你有權(quán)限,也可修改系統(tǒng)變量)。

5. 如何寫B(tài)AT

0. 文件的編輯

它就是一個(gè)文本文件,所以用最簡(jiǎn)單的記事本就可以編輯。當(dāng)然,你用其他的強(qiáng)大的工具也可以,比如如果用Vim編輯還能有語(yǔ)法高亮等VIP級(jí)待遇。無(wú)論用什么編輯器,一定要注意保存時(shí)一定把要文件的擴(kuò)展名記為*.bat,否則就不再是可執(zhí)行腳本了,大家都是程序猿,你們懂得。
前面提到了,BAT其實(shí)就是把CMD中的命令或其他可執(zhí)行命令組合到一起,所以BAT的基石是命令,下面重點(diǎn)講下命令。

1. 基本命令及其通用的規(guī)則

這里指的基本命令是指CMD命令中的的內(nèi)置命令,也就是help命令所顯示的命令,不包括在環(huán)境變量中的以及第三方的,那些是外部命令。
基本的命令有文件操作,文件夾操作,時(shí)間等等。比如:del, ren, rd, cd, copy, xcopy, time等等。

a. 命令的一般格式

與*nix系統(tǒng)的命令的一樣,它的格式也都是
command [options] [arguments]
其中options是控制和改變命令的行為,每個(gè)選項(xiàng)必須以/開(kāi)頭,后面跟選項(xiàng),可以把多個(gè)選項(xiàng)連在一起寫,也可以用空格格開(kāi),每個(gè)選項(xiàng)也可以跟自己的參數(shù)。arguments就是傳遞給命令的參數(shù),也就是要命令所執(zhí)行的對(duì)象。如:

  1. del /f /q /s tmp  
這里/f /q /s就是三個(gè)選項(xiàng)/f意思是強(qiáng)制刪除,/q是安靜模式,也就是刪除前不提示,/s是刪除子目錄;而tmp則是要?jiǎng)h除的對(duì)象也就是del命令的參數(shù)。
  1. dir /on tmp  

這里的話/on是它的選項(xiàng),其中/o是選項(xiàng),意思是排序,而n是選項(xiàng)的參數(shù),合起來(lái)就是按名字排序。
通常,一個(gè)命令都有缺省的選項(xiàng)和參數(shù),也就是說(shuō)你不指定,也會(huì)有。具體選項(xiàng)不同的命令會(huì)有不同的選項(xiàng)。

b. 一些通用的選項(xiàng):

雖然不同的命令有著不同的參數(shù),但是有一些共同的:

  • /?  顯示幫助信息,所有的命令都有(跟*nix的-h一樣)
  • /s  對(duì)于文件夾操作來(lái)講是包括子目錄(跟*nix的-r一樣)
  • /q  安靜模式,也就是某些操作不要提示,比如刪除時(shí),或覆蓋文件時(shí)不要提示

c. 獲取幫助

不可能記住所有的東西,所以每當(dāng)遇到一個(gè)命令時(shí)就要獲取其幫助信息。
help command

command /?
就可以看到command的幫助信息。而直接用help命令,則可以查看CMD命令行的幫助,也就是說(shuō)它支持哪些內(nèi)置命令。需要注意的是help只能查看有哪些內(nèi)置以及顯示內(nèi)置命令的幫助信息。對(duì)于那些在環(huán)境變量Path中的命令,它是無(wú)法獲取幫助信息的,對(duì)于那些命令,只能通過(guò)命令本身去找?guī)椭畔ⅰ?br>

2. 擴(kuò)展命令

就是CMD命令行非內(nèi)置的,存在于環(huán)境變量Path中的命令,這些命令使用起來(lái)跟內(nèi)部命令無(wú)區(qū)別,都可以在CMD中直接調(diào)用。這些命令通常都是由第三方或操作系統(tǒng)提供,完成某些特定領(lǐng)域的功能,比如C:\Windows\System和C:\Windows\System32下的很多可執(zhí)行程序,都可做為外部命令來(lái)使用,比如你在命令行中直接輸入notepad然后按回車,記事本就會(huì)打開(kāi)。以及安裝的第三方程序如WinRAR等。
這些程序或許支持命令模式,或許不支持,這個(gè)要去參考程序的文檔,另外,即使其支持命令行,選項(xiàng)和參數(shù)也要參考文檔。

3. 注釋和@及echo off

在BAT中以二個(gè)冒號(hào)開(kāi)頭的一行為注釋,::只能注釋一行,且必須在一行的開(kāi)頭
如:
:: This is a comment
:: copy a file to somewhere
@與echo off的作用一樣,都是DOS 批處理的一個(gè)特殊標(biāo)記符, 僅用于屏蔽命令行回顯。其中@只能影響當(dāng)前行,而echo off是關(guān)閉,直到echo on把回行顯示打開(kāi)。二個(gè)主要在BAT腳本中運(yùn)用,在命令行中直接用看不出不同。在BAT中每當(dāng)執(zhí)行一個(gè)命令時(shí),都會(huì)在CMD命令中顯示出這個(gè)命令,比如:
::mydir.bat
dir /on
這樣的腳本在運(yùn)行時(shí)會(huì)是這樣的:
D:\>mydir
D:\>dir /on
(顯示文件夾的內(nèi)容)
為了在執(zhí)行腳本時(shí)不顯示當(dāng)前命令,就要用到關(guān)閉回行顯示功能@和echo off,所以幾乎每個(gè)BAT都有這二行
@echo off
....
@echo on
在開(kāi)始腳本前關(guān)閉回行顯示,然后在結(jié)束時(shí)再打開(kāi)。用@的目的是把關(guān)閉回行顯示命令的回行顯示也不要顯示出來(lái)(抱歉,有點(diǎn)繞)。
為什么要關(guān)閉回行顯示呢?因?yàn)榛匦酗@示會(huì)跟所執(zhí)行命令的輸出混全在一起,所以看起來(lái)很不爽,特別是當(dāng)BAT腳本的命令比較多時(shí),所以要關(guān)閉它。

4. 管道

與*nix一樣,BAT中也可以使用管道,可以使用管道來(lái)把命令組合起來(lái),比如最常見(jiàn)的使用方式就是:
type logfile.txt | more
以分屏查看。

5. 變量的定義和使用

在BAT中用set命令來(lái)定義一個(gè)變量,然后用二個(gè)百分號(hào)來(lái)引用這個(gè)變量,所引用的地方全用所定義的值來(lái)完全替換,如:

  1. D:\>set logfile="D:\logs\log.txt"  
  2. D:\>echo %logfile%  
  3. D:\logs\log.txt  

6. 重定向

與*nix一樣BAT也支持文件流重定向。

  • <    重定向輸入流,最常用的方式是用文件代替標(biāo)準(zhǔn)輸入
  • >    重定向輸出流,最常用的方式是把程序執(zhí)行結(jié)果放到文件中
  • >>   重定向輸出流,添加模式,也就是說(shuō)從文件尾部開(kāi)始添加,最常用的地方是保存Log用

雖然Windows看起來(lái)與*nix相去甚遠(yuǎn)(特別是前幾年),但是BAT里面有著跟*nix和SHELL類似的一些重要的特性(管道和重定向),所以BAT還是相當(dāng)強(qiáng)大的,雖然不能跟SHELL比,但是至少可以幫助我們完成很多機(jī)械重復(fù)的工作。

7. 命令行參數(shù)

跟編程語(yǔ)言(C, C++, Java, Perl)和SHELL一樣,BAT也支持命令行參數(shù),也就是執(zhí)行命令時(shí)所給的參數(shù)。在BAT中用%[1-9]來(lái)引用它們,如:
::mytype.bat
@echo off
type %1
type %2
那么在運(yùn)行時(shí),
C:\>mytype one.txt two.txt
其中%1就是one.txt,%2就是two.txt
跟C和C++語(yǔ)言一樣,還有一個(gè)%0可以用它就是腳本的名字。

8. start命令

在*nix的SHELL中可以用command &的形式來(lái)在后臺(tái)運(yùn)行一個(gè)命令,也就是用一個(gè)新進(jìn)程來(lái)運(yùn)行命令,而不阻塞下面的命令。有些時(shí)候這個(gè)很有用,比如你想用BAT打開(kāi)幾個(gè)XLSX文件,用如下腳本:

  1. ::openxls.bat  
  2. @echo off  
  3. set excel="C:\Program Files\Microsoft Office\Office12\EXCEL.EXE"  
  4. %excel% "D:\documents\status.xlsx"  
  5. %excel% "E:\report\report.xlsx"  
  6. @echo on  
這樣會(huì)有問(wèn)題,運(yùn)行到打開(kāi)第一個(gè)文件時(shí)會(huì)停在那里,除非你關(guān)掉status.xlsx否則,它會(huì)阻塞在那里,第二個(gè)文件不會(huì)執(zhí)行到。
解決方法就是為每一個(gè)會(huì)阻塞的命令開(kāi)啟一個(gè)新的進(jìn)程,用start命令:
  1. ::openxls.bat  
  2. @echo off  
  3. set excel="C:\Program Files\Microsoft Office\Office12\EXCEL.EXE"  
  4. start %excel% "D:\documents\status.xlsx"  
  5. start %excel% "E:\report\report.xlsx"  
  6. @echo on  
這樣的話,二個(gè)文件都會(huì)被打開(kāi)。

9. BAT的不足之處

前面都在說(shuō)BAT如何強(qiáng)大,但是畢竟Windows沒(méi)有像*nix那樣給予命令行的強(qiáng)大支持,它跟SHELL相比還差的很遠(yuǎn),在執(zhí)行命令和文件操作方面可能沒(méi)什么大差別,但是在某些方面它還很弱:

a. 輸入的處理

雖然可以用<來(lái)重定向輸入流,但是它對(duì)輸入的處理很弱,特別的它沒(méi)的讀取的命令(SHELL中的read),它也不能按行讀入文件。所以當(dāng)涉及到文件處理時(shí),它就顯得力不從心了。

b. 文本處理的能力

如上一條說(shuō),很多時(shí)候能需要從一個(gè)文本文件讀取內(nèi)容,然后對(duì)其做一些處理。這點(diǎn)上面BAT很弱,跟SHELL是沒(méi)法比的。因?yàn)镾HELL本身有靈活的讀取函數(shù),可以按行讀,也可以把一行按不同的單詞來(lái)讀,再加上其本身有字串處理函數(shù),還有就是*nix有豐富的字串處理命令如grep, sed, ed, awk等等。當(dāng)然,現(xiàn)在這些東西也都有了Windows的版本。但是用BAT來(lái)處理文件還是一個(gè)相當(dāng)麻煩的事。
對(duì)于文本處理,最好是能用Perl等程序性的腳本來(lái)寫,它在處理輸入,讀取和處理,以及正則表達(dá)式上都有很好的支持。

10. 開(kāi)機(jī)自動(dòng)運(yùn)行

某些軟件會(huì)有內(nèi)部選項(xiàng)以達(dá)到開(kāi)機(jī)自動(dòng)運(yùn)行,甚至它總是開(kāi)機(jī)自動(dòng)運(yùn)行,比如著名的QQ,迅雷暴風(fēng)影音等等。對(duì)于我來(lái)說(shuō)這些都是流氓軟件,特別是那些無(wú)法取消其開(kāi)機(jī)自動(dòng)運(yùn)行的,會(huì)造成開(kāi)機(jī)時(shí)很卡。
但是我們?nèi)粘9ぷ鞫夹枰_(kāi)一些固定的軟件,比如郵件客戶端,Eclipse,打開(kāi)某個(gè)特定的文件夾,打開(kāi)某個(gè)特定的網(wǎng)頁(yè)等等。這些正派的軟件反倒沒(méi)有“開(kāi)機(jī)自動(dòng)運(yùn)行”選項(xiàng),怎么辦呢?這時(shí)BAT就派上大用場(chǎng)了,可以寫一個(gè)叫做startup.bat,在里面把要運(yùn)行的程序都寫上,然后在Start Menu的Startup文件夾中建一個(gè)指向我們startup.bat的快捷方式:

  1. :: startup.bat  
  2. @echo off  
  3. "C:\WINDOWS\explorer.exe" "C:\Documents and Settings\User\桌面\alex"  
  4.   
  5. set ie="C:\Program Files\Internet Explorer\iexplore.exe"  
  6. set mail="https://webmail.microsoft.com/"  
  7. start %ie% %mail%  
  8.   
  9. start "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" "D:\documents\report.xlsx"  
  10.   
  11. start mstsc d:\work\rdps\linux.RDP  
  12. start mstsc d:\work\rdps\windows.RDP  
  13.   
  14. ddms.bat  
  15. clean.bat  
  16.   
  17. D:\eclipse-java-galileo-SR2-win32\eclipse.exe  
  18. @echo on  
每個(gè)工具都有其優(yōu)勢(shì)和不足,我們要做的就是用正確的工具去做正確的事,以期達(dá)到最高效的工作效率。雖然有Perl等更加強(qiáng)大的工具,雖然有PowerTools等拓展工具。但是當(dāng)你有環(huán)境的限制的時(shí)候,比如由于工作環(huán)境的限制,你只有一個(gè)Windows系統(tǒng),沒(méi)有Perl或PowerTools時(shí),你能用的就只有BAT了。這個(gè)時(shí)候就要發(fā)揮BAT的威力了,復(fù)雜的它做不了,但是簡(jiǎn)單的它還是能很好的勝任的。
腳本,強(qiáng)大也好,局限也罷,是為了幫助我們解決一些重復(fù)性的問(wèn)題的。所以關(guān)鍵不在腳本,而是在于我們要發(fā)現(xiàn)日常工作中的重復(fù)性的勞動(dòng),然后用腳本來(lái)替代。切記,計(jì)算機(jī)的重復(fù)性遠(yuǎn)比人好,而且計(jì)算機(jī)就是被設(shè)計(jì)用來(lái)代替人類做一些機(jī)械重復(fù)的工作的,這是它的使命,讓它完成它的使命吧!


參考資料:這幾篇文章介紹的比較詳細(xì)
基本介紹
 ”石頭札記 批處理文件“
這二個(gè)哥們寫了很多操作字串的BAT
 "DOS -string operations"
 "DOS - String Manipulation"

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
BAT腳本編寫教程簡(jiǎn)單入門篇
.bat文件中echo和@的用法
DOS命令大全二
分享
dos命令創(chuàng)建批處理腳本
Bat批處理文件
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服