Batch批處理學(xué)習(xí)

之前項(xiàng)目用到了MySQL升敲、Redis攻臀、MongoDB和其他一些獨(dú)立的jar包程序,測(cè)試的時(shí)候需要用腳本配置java環(huán)境變量盗扒,并運(yùn)行各個(gè)程序跪楞。結(jié)果打開有四五個(gè)cmd黑框,領(lǐng)導(dǎo)又要求不顯示cmd黑框侣灶。經(jīng)過網(wǎng)上查閱資料甸祭,學(xué)習(xí)了一下批處理的一些知識(shí),寫下這篇文章整理一下褥影。

一池户、批處理介紹

批處理(Batch),也稱為批處理腳本凡怎。顧名思義校焦,批處理就是對(duì)某對(duì)象進(jìn)行批量的處理。批處理文件的擴(kuò)展名為bat统倒。目前比較常見的批處理包含兩類:DOS批處理和PS批處理寨典。PS批處理是基于強(qiáng)大的圖片編輯軟件Photoshop的,用來批量處理圖片的腳本房匆,而DOS批處理則是基于DOS命令的耸成,用來自動(dòng)地批量地執(zhí)行DOS命令以實(shí)現(xiàn)特定操作的腳本。

批處理是一種簡(jiǎn)化的腳本語言浴鸿,它應(yīng)用于DOS和Windows系統(tǒng)中井氢,它是由DOS或者Windows系統(tǒng)內(nèi)嵌的命令解釋器(通常是COMMAND.COM或者CMD.EXE)解釋運(yùn)行。批處理的編程能力遠(yuǎn)不如C語言等編程語言岳链,也十分不規(guī)范花竞,大小寫不敏感(命令符忽略大小寫)。每個(gè)編寫好的批處理文件都相當(dāng)于一個(gè)DOS的外部命令掸哑,把它所在的目錄放到DOS搜索路徑(path)中约急,即可在任意位置運(yùn)行寇仓。

批處理類似于Unix中的Shell腳本。批處理文件具有.bat或者.cmd的擴(kuò)展名烤宙,其最簡(jiǎn)單的例子,是逐行書寫在命令行中會(huì)用到的各種命令俭嘁。更復(fù)雜的情況躺枕,需要使用if,for供填,goto等命令控制程序的運(yùn)行過程拐云,如同C,Basic等中高級(jí)語言一樣近她。如果需要實(shí)現(xiàn)更復(fù)雜的應(yīng)用叉瘩,利用外部程序是必要的,這包括系統(tǒng)本身提供的外部命令和第三方提供的工具或者軟件粘捎。

二薇缅、創(chuàng)建批處理文件

批處理文件,或稱為批處理程序攒磨,是由一條條的DOS命令組成的普通文本文件泳桦,可以用記事本直接編輯或用DOS命令創(chuàng)建,也可以用DOS下的文本編輯器Edit.exe來編輯娩缰。在“命令提示”下鍵入批處理文件的名稱灸撰,或者雙擊該批處理文件,系統(tǒng)就會(huì)調(diào)用Cmd.exe運(yùn)行該批處理程序拼坎。

一般情況下浮毯,每條命令占據(jù)一行。當(dāng)然也可以將多條命令用特定符號(hào)(如:&泰鸡、&&债蓝、|、||等)分隔后寫入同一行中鸟顺,還有的情況就是像if惦蚊、for等較高級(jí)的命令則要占據(jù)幾行甚至幾十幾百行的空間。系統(tǒng)在解釋運(yùn)行批處理程序時(shí)讯嫂,首先掃描整個(gè)批處理程序蹦锋,然后從第一行代碼開始向下逐句執(zhí)行所有的命令,直至程序結(jié)尾或遇見exit命令或出錯(cuò)意外退出欧芽。

三莉掂、常用DOS命令

1、文件夾管理:
cd 顯示當(dāng)前目錄名或改變當(dāng)前目錄千扔。
cd #顯示當(dāng)前目錄
cd /d d:sdk #可以同時(shí)更改盤符和目錄
md 創(chuàng)建目錄憎妙。
rd 刪除一個(gè)目錄库正。
rd abc #刪除當(dāng)前目錄里的 abc 子目錄,要求為空目錄
rd /s/q d:temp #刪除 d:temp 文件夾及其子文件夾和文件厘唾,/q安靜模式
dir 顯示目錄中的文件和子目錄列表褥符。
tree 以圖形顯示驅(qū)動(dòng)器或路徑的文件夾結(jié)構(gòu)。
tree d: #顯示D盤的文件目錄結(jié)構(gòu)
path 為可執(zhí)行文件顯示或設(shè)置一個(gè)搜索路徑抚垃。
xcopy 復(fù)制文件和目錄樹喷楣。

2、文件管理:
type 顯示文本文件的內(nèi)容鹤树。
copy 將一份或多份文件復(fù)制到另一個(gè)位置铣焊。
Sample:
copy c:test.txt d:test.bak 復(fù)制 c:test.txt 文件到 d: ,并重命名為 test.bak
copy con test.txt 從屏幕上等待輸入罕伯,按 Ctrl+Z 結(jié)束輸入曲伊,輸入內(nèi)容存為test.txt文件,con代表屏幕追他,prn代表打印機(jī)坟募,nul代表空設(shè)備
copy 1.txt + 2.txt 3.txt 合并 1.txt 和 2.txt 的內(nèi)容,保存為 3.txt 文件邑狸,如果不指定 3.txt 婿屹,則保存到 1.txt
copy test.txt + 復(fù)制文件到自己,實(shí)際上是修改了文件日期
del 刪除一個(gè)或數(shù)個(gè)文件推溃。
Sample:
del d:test.txt #刪除指定文件昂利,不能是隱藏、系統(tǒng)铁坎、只讀文件
del /q/a/f d:temp. #刪除 d:temp 文件夾里面的所有文件蜂奸,包括隱藏、只讀硬萍、系統(tǒng)文件扩所,不包括子目錄
del /q/a/f/s d:temp. #刪除 d:temp 及子文件夾里面的所有文件,包括隱藏朴乖、只讀祖屏、系統(tǒng)文件,不包括子目錄
move 移動(dòng)文件并重命名文件和目錄买羞。(Windows XP Home Edition中沒有)
ren 重命名文件袁勺。
replace 替換文件。
attrib 顯示或更改文件屬性畜普。
find 搜索字符串期丰。
Sample:
find "abc" c:test.txt #在 c:test.txt 文件里查找含 abc 字符串的行,如果找不到,將設(shè) errorlevel 返回碼為1
find /i “abc” c:test.txt #查找含 abc 的行钝荡,忽略大小寫
find /c "abc" c:test.txt #顯示含 abc 的行的行數(shù)
fc 比較兩個(gè)文件或兩個(gè)文件集并顯示它們之間的不同

3街立、網(wǎng)絡(luò)命令:
ping 進(jìn)行網(wǎng)絡(luò)連接測(cè)試、名稱解析
ftp 文件傳輸
net 網(wǎng)絡(luò)命令集及用戶管理
Sample:
net view 192.168.10.8
net share 查看你機(jī)器的共享資源
net share 共享資源名稱/d 手工刪除共享,注意后有空格
net share mymovie=e:\downloads\movie /users:3 mymovie 共享成功埠通。 同時(shí)限制鏈接用戶數(shù)為3人
telnet 遠(yuǎn)程登陸
ipconfig顯示赎离、修改TCP/IP設(shè)置
msg 給用戶發(fā)送消息
arp 顯示、修改局域網(wǎng)的IP地址-物理地址映射列表

4端辱、系統(tǒng)管理:
title 新標(biāo)題 #可以看到cmd窗口的標(biāo)題欄變了
ver #顯示系統(tǒng)版本
vol #顯示卷標(biāo)
label #顯示卷標(biāo)蟹瘾,同時(shí)提示輸入新卷標(biāo)
Sample:
label c:system #設(shè)置C盤的卷標(biāo)為 system
date #顯示當(dāng)前日期,并提示輸入新日期掠手,按"回車"略過輸入
date/t #只顯示當(dāng)前日期,不提示輸入新日期
time #顯示當(dāng)前時(shí)間狸捕,并提示輸入新時(shí)間喷鸽,按"回車"略過輸入
time/t #只顯示當(dāng)前時(shí)間,不提示輸入新時(shí)間
more c:test.txt #逐屏顯示 c:test.txt 的文件內(nèi)容
at 安排在特定日期和時(shí)間運(yùn)行命令和程序
cls 清屏
shutdown立即或定時(shí)關(guān)機(jī)或重啟
tskill 結(jié)束進(jìn)程
taskkill結(jié)束進(jìn)程(比tskill高級(jí)灸拍,但WinXPHome版中無該命令)
tasklist顯示進(jìn)程列表(Windows XP Home Edition中沒有)
sc 系統(tǒng)服務(wù)設(shè)置與控制
reg 注冊(cè)表控制臺(tái)工具
powercfg控制系統(tǒng)上的電源設(shè)置

對(duì)于以上列出的所有命令做祝,在cmd中輸入命令+/?即可查看該命令的幫助信息。如find /?

四鸡岗、批處理符號(hào)簡(jiǎn)介

回顯屏蔽 @
重定向1 >與>>混槐,> 清除文件中原有的內(nèi)容后再寫入,>> 追加內(nèi)容到文件末尾轩性,而不會(huì)清除原有的內(nèi)容声登,主要將本來顯示在屏幕上的內(nèi)容輸出到指定文件中,指定文件如果不存在揣苏,則自動(dòng)生成該文件悯嗓。
type c:test.txt >prn 屏幕上不顯示文件內(nèi)容,轉(zhuǎn)向輸出到打印機(jī)
echo hello world>con 在屏幕上顯示hello world卸察,實(shí)際上所有輸出都是默認(rèn) >con 的
copy c:test.txt f: >nul 拷貝文件脯厨,并且不顯示"文件復(fù)制成功"的提示信息,但如果f盤不存在坑质,還是會(huì)顯示出錯(cuò)信息
copy c:test.txt f: >nul 2>nul #不顯示”文件復(fù)制成功”的提示信息合武,并且f盤不存在的話,也不顯示錯(cuò)誤提示信息
echo ^^W ^> ^W>c:test.txt # 生成的文件內(nèi)容為 ^W > W涡扼,^ 和 > 是控制命令稼跳,要把它們輸出到文件,必須在前面加個(gè) ^ 符號(hào)
重定向2 <吃沪,#從文件中獲得輸入信息岂贩,而不是從屏幕上,一般用于 date time label 等需要等待輸入的命令。
Sample:
@echo off
echo 2005-05-01>temp.txt
date <temp.txt
del temp.txt
這樣就可以不等待輸入直接修改當(dāng)前日期
管道符號(hào) |
Sample:
dir . /s/a | find /c ".exe" #管道命令表示先執(zhí)行 dir 命令萎津,對(duì)其輸出的結(jié)果執(zhí)行后面的 find 命令卸伞,該命令行結(jié)果:輸出當(dāng)前文件夾及所有子文件夾里的.exe文件的個(gè)數(shù)
type c:test.txt|more #這個(gè)和 more c:test.txt 的效果是一樣的
轉(zhuǎn)義符 ^
邏輯命令符包括:&、&&锉屈、||
&順序執(zhí)行多條命令荤傲,而不管命令是否執(zhí)行成功
&&順序執(zhí)行多條命令,當(dāng)碰到執(zhí)行出錯(cuò)的命令后將不執(zhí)行后面的命令
Sample:
find "ok" c:test.txt && echo 成功 #如果找到了"ok"字樣颈渊,就顯示"成功"遂黍,找不到就不顯示
||順序執(zhí)行多條命令,當(dāng)碰到執(zhí)行正確的命令后將不執(zhí)行后面的命令
Sample:
find "ok" c:test.txt || echo 不成功 #如果找不到"ok"字樣俊嗽,就顯示"不成功"雾家,找到了就不顯示

五、 系統(tǒng)參數(shù)

1绍豁、系統(tǒng)參數(shù)
%SystemRoot% === C:\WINDOWS (%windir% 同樣)
%ProgramFiles% === C:\Program Files
%USERPROFILE% === C:\Documents and Settings\Administrator (子目錄有“桌面”,“開始菜單”,“收藏夾”等)
%APPDATA% === C:\Documents and Settings\Administrator\Application Data
%TEMP% === C:\DOCUME1\ADMINI1\LOCALS~1\Temp (%TEM% 同樣)
%APPDATA% === C:\Documents and Settings\Administrator\Application Data
%OS% === Windows_NT (系統(tǒng))
%Path% === %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem (原本的設(shè)置)
%HOMEDRIVE% === C: (系統(tǒng)盤)
%HOMEPATH% === \Documents and Settings\Administrator

2芯咧、傳遞參數(shù)給批處理文件
%[1-9]表示參數(shù),參數(shù)是指在運(yùn)行批處理文件時(shí)在文件名后加的以空格(或者Tab)分隔的字符串竹揍。
變量可以從%0到%9敬飒,%0表示批處理命令本身,其它參數(shù)字符串用 %1 到 %9 順序表示芬位,%* 從第一個(gè)參數(shù)開始的所有參數(shù)
Sample:
call test2.bat "hello" "haha" (執(zhí)行同目錄下的“test2.bat”文件无拗,并輸入兩個(gè)參數(shù))
在“test2.bat”文件里寫:
echo %1 (打印: "hello")
echo %2 (打印: "haha")
echo %0 (打印: test2.bat)
echo %19 (打印: "hello"9)

六、Windows Batch 常用命令

1昧碉、Echo
語法: echo [{on|off}] [message]
ECHO [ON | OFF] 打開回顯或關(guān)閉回顯功能
ECHO [message] 顯示信息英染。
在實(shí)際應(yīng)用中我們會(huì)把這條命令和重定向符號(hào)( 也稱為管道符號(hào),一般用 > >> ^ )結(jié)合來實(shí)現(xiàn)輸入一些命令到特定格式的文件中被饿。
echo off #從下一行開始關(guān)閉回顯
@echo off #從本行開始關(guān)閉回顯税迷。一般批處理第一行都是這個(gè)
echo on #從下一行開始打開回顯
echo #顯示當(dāng)前是 echo off 狀態(tài)還是 echo on 狀態(tài)
echo. #輸出一個(gè)”回車換行”,空白行
echo %errorlevel%
每個(gè)命令運(yùn)行結(jié)束锹漱,可以用這個(gè)命令行格式查看返回碼
默認(rèn)值為0箭养,一般命令執(zhí)行出錯(cuò)會(huì)設(shè) errorlevel 為1

2、@ 命令
表示不顯示@后面的命令,@ 與 echo off 相象哥牍,但它是加在每個(gè)命令行的最前面毕泌,表示運(yùn)行時(shí)不顯示這一行的命令行(只能影響當(dāng)前行)。

3嗅辣、Pause 命令
會(huì)暫停批處理的執(zhí)行并在屏幕上顯示Press any key to continue...的提示撼泛,等待用戶按任意鍵后繼續(xù)

4、Rem 命令
語法:Rem Message..(小技巧:用::代替rem)
注釋命令澡谭,在C語言中相當(dāng)與/.../,它并不會(huì)被執(zhí)行愿题,只是起一個(gè)注釋的作用,便于別人閱讀和自己日后修改。

5潘酗、Goto 命令
語法:goto label (label是參數(shù)杆兵,指定所要轉(zhuǎn)向的批處理程序中的行。)
指定跳轉(zhuǎn)到標(biāo)簽行仔夺,找到標(biāo)簽行后琐脏,程序?qū)⑻幚韽南乱恍虚_始的命令。label標(biāo)簽的名字可以隨便起缸兔,但是最好是有意義的日裙,字母前必須加個(gè)冒號(hào)“:”來表示這個(gè)字母是標(biāo)簽。
goto命令就是根據(jù)這個(gè)冒號(hào)來尋找下一步跳到到那里惰蜜。經(jīng)常與 if 配合使用昂拂,根據(jù)不同的條件來執(zhí)行不同的命令組。
Sample:
@echo off
:begin
copy a:. d:\back
echo Please put a new disk into driver A
pause
goto begin

6抛猖、If 命令
if 表示將判斷是否符合規(guī)定的條件格侯,從而決定執(zhí)行不同的命令。有三種格式:
(1)樟结、 IF
語法: if [not] "參數(shù)" == "字符串" 待執(zhí)行的命令
參數(shù)如果等于(not表示不等,下同)指定的字符串精算,則條件成立瓢宦,運(yùn)行命令,否則運(yùn)行下一句灰羽。(注意是兩個(gè)等號(hào))
(2)驮履、 if exist
語法: if [not] exist [路徑]文件名 待執(zhí)行的命令
如果有指定的文件,則條件成立廉嚼,運(yùn)行命令玫镐,否則運(yùn)行下一句。
(3)怠噪、 if errorlevel number
語法: if [not] errorlevel <數(shù)字> 待執(zhí)行的命令
如果程序返回值等于指定的數(shù)字恐似,則條件成立,運(yùn)行命令傍念,否則運(yùn)行下一句矫夷。(返回值必須按照從大到小的順序排列)
很多DOS程序在運(yùn)行結(jié)束后會(huì)返回一個(gè)數(shù)字值用來表示程序運(yùn)行的結(jié)果(或者狀態(tài)),稱為錯(cuò)誤碼errorlevel或稱返回碼憋槐。
常見的返回碼為0双藕、1。通過if errorlevel命令可以判斷程序的返回值阳仔,根據(jù)不同的返回值來決定執(zhí)行不同的命令忧陪。
Sample:
@echo off
XCOPY F:\test.bat D:
IF ERRORLEVEL 1 (ECHO 文件拷貝失敗
) Else IF ERRORLEVEL 0 ECHO 成功拷貝文件
pause
(4)、 else
語法: if 條件 (成立時(shí)執(zhí)行的命令) else (不成立時(shí)執(zhí)行的命令)
如果是多個(gè)條件,建議適當(dāng)使用括號(hào)把各條件包起來嘶摊,以免出錯(cuò)延蟹。注:如果 else 的語句需要換行,if 執(zhí)行的行尾需用“^”連接更卒,并且 if 執(zhí)行的動(dòng)作需用(括起來)等孵,否則報(bào)錯(cuò)
(5)、比較運(yùn)算符:
EQU - 等于 (一般使用雙等號(hào))
NEQ - 不等于 (沒有 “!=”,改用“ if not 1==1 ”的寫法)
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

7蹂空、Start 命令
調(diào)用外部程序俯萌,所有的 DOS命令 和 命令行程序 都可以由 start命令 來調(diào)用。

8上枕、Call 命令
語法: call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
參數(shù): [Drive:][Path] FileName 指定要調(diào)用的批處理程序的位置和名稱咐熙。filename 參數(shù)必須具有 .bat 或 .cmd 擴(kuò)展名。
調(diào)用另一個(gè)批處理程序辨萍,并且不終止父批處理程序棋恼。如果不用call而直接調(diào)用別的批處理文件,那么執(zhí)行完那個(gè)批處理文件后將無法返回當(dāng)前文件并執(zhí)行當(dāng)前文件的后續(xù)命令锈玉。
call 命令接受用作調(diào)用目標(biāo)的標(biāo)簽爪飘。如果在腳本或批處理文件外使用 Call,它將不會(huì)在命令行起作用拉背。
注:可以調(diào)用自身(死循環(huán)师崎、遞歸)

9、Choice 命令
choice 使用此命令可以讓用戶輸入一個(gè)字符(用于選擇)椅棺,從而根據(jù)用戶的選擇返回不同的 errorlevel犁罩,
然后配合 if errorlevel 選擇運(yùn)行不同的命令。
注意:choice命令為DOS或者Windows系統(tǒng)提供的外部命令两疚,不同版本的choice命令語法會(huì)稍有不同床估,請(qǐng)用choice /?查看用法。
choice 使用此命令可以讓用戶輸入一個(gè)字符诱渤,從而運(yùn)行不同的命令丐巫。
使用時(shí)應(yīng)該加/c:參數(shù),c:后應(yīng)寫提示可輸入的字符勺美,之間無空格鞋吉。它的返回碼為1234…

10、For 命令
for 命令是一個(gè)比較復(fù)雜的命令励烦,主要用于參數(shù)在指定的范圍內(nèi)循環(huán)執(zhí)行命令谓着。
(1)、for {%variable | %%variable} in (set) do command [command-parameters]
%variable 指定一個(gè)單一字母可替換的參數(shù)坛掠。變量名稱是區(qū)分大小寫的赊锚,所以 %i 不同于 %I
在批處理文件中使用 FOR 命令時(shí)治筒,指定變量建議用 %%variable而不要用 %variable。
(set) 指定一個(gè)或一組文件舷蒲∷释啵可以使用通配符。
command 指定對(duì)每個(gè)文件執(zhí)行的命令牲平。
command-parameters 為特定命令指定參數(shù)或命令行開關(guān)堤框。
(2)、 如果命令擴(kuò)展名被啟用纵柿,下列額外的 FOR 命令格式會(huì)受到支持:
a.FOR /D %variable IN (set) DO command [command-parameters]
如果集里面包含通配符蜈抓,則指定與目錄名匹配,而不與文件名匹配昂儒。
b.FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
檢查以 [drive:]path 為根的目錄樹沟使,指向每個(gè)目錄中的FOR 語句。
如果在 /R 后沒有指定目錄渊跋,則使用當(dāng)前目錄腊嗡。如果集僅為一個(gè)單點(diǎn)(.)字符,則枚舉該目錄樹拾酝。
c.FOR /L %variable IN (start,step,end) DO command [command-parameters]
該集表示以增量形式從開始到結(jié)束的一個(gè)數(shù)字序列燕少。
如:(1,1,5) 將產(chǎn)生序列 1 2 3 4 5; 而(5,-1,1) 將產(chǎn)生序列 (5 4 3 2 1)蒿囤。
d.有或者沒有 usebackq 選項(xiàng):
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (command) DO command
參數(shù)"options"為:
eol=c - 指一個(gè)行注釋字符的結(jié)尾(就一個(gè),如“;”)
skip=n - 指在文件開始時(shí)忽略的行數(shù)客们。
delims=xxx - 指分隔符集。這個(gè)替換了空格和跳格鍵的默認(rèn)分隔符集蟋软。
tokens=x,y,m-n - 指每行的哪一個(gè)符號(hào)被傳遞到每個(gè)迭代的 for 本身镶摘。這會(huì)導(dǎo)致額外變量名稱的分配嗽桩。
m-n格式為一個(gè)范圍岳守。通過 nth 符號(hào)指定 mth。
如果符號(hào)字符串中的最后一個(gè)字符星號(hào)碌冶,那么額外的變量將在最后一個(gè)符號(hào)解析之后分配并接受行的保留文本湿痢。
usebackq - 指定新語法已在下類情況中使用:
在作為命令執(zhí)行一個(gè)后引號(hào)的字符串并且一個(gè)單引號(hào)字符為文字字符串命令并允許在 filenameset中使用雙引號(hào)擴(kuò)起文件名稱。
(3)扑庞、Sample:

  1. 如下命令行會(huì)顯示當(dāng)前目錄下所有以bat或者txt為擴(kuò)展名的文件名譬重。
    for %%c in (.bat .txt) do (echo %%c)
    a. 如下命令行會(huì)顯示當(dāng)前目錄下所有包含有 e 或者 i 的目錄名。
    for /D %%a in (
    e
    i) do echo %%a
    b. 如下命令行會(huì)顯示 E盤test目錄 下所有以bat或者txt為擴(kuò)展名的文件名罐氨。
    for /R E:\test %%b in (*.txt .bat) do echo %%b
    for /r %%c in (
    ) do (echo %%c) :: 遍歷當(dāng)前目錄下所有文件
    c. 如下命令行將產(chǎn)生序列 1 2 3 4 5
    for /L %%c in (1,1,5) do echo %%c
    d. 以下兩句臀规,顯示當(dāng)前的年月日和時(shí)間
    For /f "tokens=1-3 delims=-/. " %%j In ('Date /T') do echo %%j年%%k月%%l日
    For /f "tokens=1,2 delims=: " %%j In ('TIME /T') do echo %%j時(shí)%%k分
    e. 把記事本中的內(nèi)容每一行前面去掉8個(gè)字符
    setlocal enabledelayedexpansion
    for /f %%i in (zhidian.txt) do (
    set atmp=%%i
    set atmp=!atmp:~8!
    if {!atmp!}=={} ( echo.) else echo !atmp!
    )
    :: 讀取記事本里的內(nèi)容(使用 delims 是為了把一行顯示全,否則會(huì)以空格為分隔符)
    for /f "delims=" %%a in (zhidian.txt) do echo.%%a
    (4)、 continue 和 break
    利用 goto 實(shí)現(xiàn)程序中常用的 continue 和 break 命令, 其實(shí)非常簡(jiǎn)單
    continue: 在 for 循環(huán)的最后一行寫上一個(gè)標(biāo)簽栅隐,跳轉(zhuǎn)到這位置即可
    break: 在 for 循環(huán)的外面的下一句寫上一個(gè)標(biāo)簽塔嬉,跳轉(zhuǎn)到這位置即可

11玩徊、Set命令
set 設(shè)置變量,引用變量可在變量名前后加 % ,即 %變量名%
set #顯示目前所有可用的變量谨究,包括系統(tǒng)變量和自定義的變量
echo %SystemDrive% #顯示系統(tǒng)盤盤符恩袱。系統(tǒng)變量可以直接引用
set p #顯示所有以p開頭的變量,要是一個(gè)也沒有就設(shè)errorlevel=1
set p=aa1bb1aa2bb2 #設(shè)置變量p胶哲,并賦值為 = 后面的字符串畔塔,即aa1bb1aa2bb2
echo %p% #顯示變量p代表的字符串,即aa1bb1aa2bb2
echo %p:~6% #顯示變量p中第6個(gè)字符以后的所有字符鸯屿,即aa2bb2
echo %p:~6,3% #顯示第6個(gè)字符以后的3個(gè)字符澈吨,即aa2
echo %p:~0,3% #顯示前3個(gè)字符,即aa1
echo %p:~-2% #顯示最后面的2個(gè)字符碾盟,即b2
echo %p:~0,-2% #顯示除了最后2個(gè)字符以外的其它字符棚辽,即aa1bb1aa2b
echo %p:aa=c% #用c替換變量p中所有的aa,即顯示c1bb1c2bb2
echo %p:aa=% #將變量p中的所有aa字符串置換為空冰肴,即顯示1bb12bb2
echo %p:bb=c% #第一個(gè)bb及其之前的所有字符被替換為c屈藐,即顯示c1aa2bb2
set p=%p:
bb=c% #設(shè)置變量p,賦值為 %p:*bb=c% 熙尉,即c1aa2bb2
set /a p=39 #設(shè)置p為數(shù)值型變量联逻,值為39
set /a p=39/10 #支持運(yùn)算符,有小數(shù)時(shí)用去尾法检痰,39/10=3.9包归,去尾得3,p=3
set /a p=p/10 #用 /a 參數(shù)時(shí)铅歼,在 = 后面的變量可以不加%直接引用
set /a p=”1&0″ #”與”運(yùn)算公壤,要加引號(hào)。其它支持的運(yùn)算符參見set/?
set p= #取消p變量
set /p p=請(qǐng)輸入
屏幕上顯示”請(qǐng)輸入”椎椰,并會(huì)將輸入的字符串賦值給變量p
注意變量在 if 和 for 的復(fù)合語句里是一次性全部替換的厦幅。可以啟用”延緩環(huán)境變量擴(kuò)充”慨飘,用 ! 來引用變量确憨,即 !變量名!

12、Color 命令
設(shè)置背景及字體顏色
語法: color bf
b 是指定背景色的十六進(jìn)制數(shù)字瓤的; f 指定前景顏色(即字體顏色)休弃。
顏色值: 0:黑色 1:藍(lán)色 2:綠色 3:湖藍(lán) 4:紅色 5:紫色 6:黃色 7:白色
8:灰色 9:淡藍(lán) A:淡綠 B:淺綠 C:淡紅 D:淡紫 E:淡黃 F:亮白
如果沒有給定任何參數(shù),該命令會(huì)將顏色還原到 CMD.EXE 啟動(dòng)時(shí)的顏色圈膏。
如果兩參數(shù)一樣塔猾,視為無效輸入。只有一個(gè)參數(shù)時(shí)稽坤,設(shè)置字體丈甸。

13医增、 Random 命令
產(chǎn)生隨機(jī)數(shù)(正整數(shù)0~)

14、Exit 命令
結(jié)束程序老虫。即時(shí)是被調(diào)用的程序叶骨,結(jié)束后也不會(huì)返回原程序

七、字符串處理

  1. 分割字符串祈匙,以查看時(shí)間為例
    %源字符串:~起始值,截取長(zhǎng)度% (起始值從0開始忽刽;截取長(zhǎng)度是可選的,如果省略逗號(hào)和截取長(zhǎng)度夺欲,將會(huì)從起始值截取到結(jié)尾跪帝;
    截取長(zhǎng)度如果是負(fù)數(shù),表示截取到倒數(shù)第幾個(gè)些阅。)
    "%time%" 顯示如:"11:04:23.03" (完整的時(shí)間"hh:mm:ss.tt")
    "%time:~0,5%" 顯示"hh:mm"(即"11:04")伞剑,其中0表示從右向左移位操作的個(gè)數(shù),5表示從左向右移位操作的個(gè)數(shù)
    "%time:~0,8%" 顯示標(biāo)準(zhǔn)時(shí)間格式"hh:mm:ss"(即"11:04:23"市埋,前8個(gè)字符串)
    "%time:~3,-3%"顯示"mm:ss"(即從第4個(gè)開始,截去最后3個(gè)的字符串)
    "%time:~3%" 顯示"04:23.03"(即去掉前4個(gè)字符串)
    "%time:~-3%" 顯示".tt"(即最后3個(gè)字符串)
    上面的字串分割格式黎泣,也可以用于其它地方,如目錄路徑:"%cd:~0,10%"

  2. 替換字符串
    set a="abcd1234"
    echo %a% 顯示:"abcd1234"
    set a=%a:1=kk% 替換“1”為“kk”
    echo %a% 顯示:"abcdkk234"

  1. 字符串合并
    由于沒有直接的字符串合并函數(shù)缤谎,只能用笨方法了抒倚。
    set str1=%str1%%str2% (合并 str1 和 str2)

  2. 計(jì)算字符串長(zhǎng)度
    沒有現(xiàn)成的函數(shù)。如下程序利用 goto形成循環(huán)坷澡,不斷將字符串截短1托呕,并記錄截短的次數(shù),到字符串變成空時(shí)的次數(shù)即長(zhǎng)度频敛。
    set testStr=This is a test string
    :: 將 testStr 復(fù)制到str项郊,str 是個(gè)臨時(shí)字符串
    set str=%testStr%
    :: 標(biāo)簽,用于goto跳轉(zhuǎn)
    :next1
    :: 判斷str是不是空斟赚,如果不是則執(zhí)行下邊的語句
    if not "%str%"=="" (
    :: 算術(shù)運(yùn)算着降,使num的值自增1,相當(dāng)于num++或者++num語句
    set /a num+=1
    :: 截取字符串汁展,每次截短1
    set "str=%str:~1%"
    :: 跳轉(zhuǎn)到next1標(biāo)簽: 這里利用goto和標(biāo)簽鹊碍,構(gòu)成循環(huán)結(jié)構(gòu)
    goto next1
    )
    :: 當(dāng)以上循環(huán)結(jié)構(gòu)執(zhí)行完畢時(shí)厌殉,會(huì)執(zhí)行下邊的語句
    echo testStr=%testStr%
    echo testStr的長(zhǎng)度為:%num%

  1. 截取字符串時(shí)食绿,需要傳遞參數(shù)
    直接 echo %args:~%num%,-5% 沒辦法想要的字符串,需要如下兩步
    setlocal enabledelayedexpansion
    echo !args:~%num%,-5!

八公罕、注冊(cè)表操作

  1. 備份注冊(cè)表器紧,將[HKEY_LOCAL_MACHINE ... Run]的內(nèi)容,備份到“c:\windows\1.reg”
    reg export HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run c:\windows\1.reg
    reg export HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run c:\windows\2.reg

  2. 修改/添加注冊(cè)表內(nèi)容
    a.一般的添加或修改
    reg add "HKCU\Environment" /v Java_Home /t reg_sz /d "D:\Java\jdk1.6.0_07" /f
    上句解析:“HKCU”是“HKEY_CURRENT_USER”的縮寫楼眷,不用縮寫用全稱也可以铲汪;
    添加名稱為“Java_Home”的變量熊尉;類型為“reg_sz”,另一種常見類型是“reg_dword”掌腰;值為 D:\Java\jdk1.6.0_07狰住;
    b.使用變量
    set SoftWareHome=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java
    reg add "%SoftWareHome%Web Start\1.6.0_07" /v Home /t reg_sz /d "%cd%\jre1.6.0_07\bin" /f
    c.如果注冊(cè)表的名稱有空格,或者數(shù)據(jù)用特殊符號(hào)時(shí)
    reg add "%SoftWareHome2%\HelpCommands" /v "01:Online Documentation" /t reg_sz /d ""%cd%\Documentation\Index.htm"" /f
    傳入值為(值用雙引號(hào)括起來的):"D:\ProgramFiles\1.work_soft\Sybase\PowerDesigner_12\Documentation\Index.htm"
    reg add "%SoftWareHome2%\Paths" /v ReportTemplates /t reg_sz /d "%cd%\Resource Files\Report Templates\" /f
    傳入值為(“\”結(jié)尾的): E:\Holemar\1.notes\90. Windows\Resource Files\Report Templates
    d.增加空的內(nèi)容
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg\IMJPMIG8.1"
    e.添加或修改默認(rèn)值
    reg add "%vpath%InstallPath" /ve /t reg_sz /d "%cd%" /f
    這里用“/ve”來代替一般修改時(shí)的“/v 變量名”,即可修改默認(rèn)值了

  3. 刪除注冊(cè)表的內(nèi)容
    雙引號(hào)里面的是注冊(cè)表的目錄齿梁,下面兩句將刪除這目錄下的所有信息
    reg delete "HKEY_CURRENT_USER\Software\RealVNC" /f
    reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC" /f
    雙引號(hào)里面的是注冊(cè)表的目錄催植,下面一句將刪除這目錄下指定的某個(gè)信息
    reg delete "HKEY_LOCAL_MACHINE\Software\RealVNC" /v VNC_Server /f

  4. 注冊(cè)表的常用位置
    a.系統(tǒng)啟動(dòng)項(xiàng):
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
    example: REG ADD HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run /v VNC_Server /t REG_SZ /d "%cd%\VNC_Server.bat" /f
    b.系統(tǒng)環(huán)境變量:
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
    c.當(dāng)前用戶的環(huán)境變量:
    [HKEY_CURRENT_USER\Environment]

  5. 修改注冊(cè)表之后,結(jié)束并重新加載explorer.exe進(jìn)程勺择,可刷新注冊(cè)表创南,令其生效
    taskkill /f /im explorer.exe >nul
    start "" "explorer.exe"

九、系統(tǒng)服務(wù)

  1. 停止服務(wù):NET STOP 服務(wù)名
    啟動(dòng)服務(wù):NET Start 服務(wù)名

  2. 設(shè)置啟動(dòng)類型
    自動(dòng): SC CONFIG 服務(wù)名 START= auto
    手動(dòng): SC CONFIG 服務(wù)名 START= demand
    已禁用:SC CONFIG 服務(wù)名 START= disabled
    附:“START= ”等號(hào)后面必須要有一個(gè)空格省核。(start還有boot,system兩個(gè)值)
    Sample: SC CONFIG Spooler START= demand (打印機(jī)加載項(xiàng)稿辙,設(shè)置成手動(dòng),默認(rèn)自動(dòng))

  3. 查看系統(tǒng)服務(wù):start %SystemRoot%\system32\services.msc /s
    setlocal與變量延遲

  4. 在沒有開啟變量延遲的情況下气忠,某條命令行中的變量改變邻储,必須到下一條命令才能體現(xiàn)。
    另外例如for命令等旧噪,其后用一對(duì)圓括號(hào)閉合的所有語句也當(dāng)作一行芥备。
    example:
    set a=4
    set a=5 & echo %a%
    結(jié)果:4
    也可以對(duì)這種機(jī)制加以利用,如下的變量交換
    example:
    set var1=abc
    set var2=123
    echo 交換前: var1=%var1% var2=%var2%
    set var1=%var2%& set var2=%var1%
    echo 交換后: var1=%var1% var2=%var2%

  5. 啟動(dòng)批處理文件中環(huán)境變量的本地化舌菜。本地化將持續(xù)到出現(xiàn)匹配的 endlocal 命令或者到達(dá)批處理文件結(jié)尾為止萌壳。
    語法: setlocal {enableextension | disableextensions} {enabledelayedexpansion | disabledelayedexpansion}
    enableextension: 啟用命令擴(kuò)展,直到出現(xiàn)匹配的 endlocal 命令日月,無論 setlocal 命令之前的設(shè)置如何袱瓮。
    disableextensions: 禁用命令擴(kuò)展,直到出現(xiàn)匹配的 endlocal 命令爱咬,無論 setlocal 命令之前的設(shè)置如何尺借。
    enabledelayedexpansion: 啟用延遲的環(huán)境變量擴(kuò)展,直到出現(xiàn)匹配的 endlocal 命令精拟,無論 setlocal 命令之前的設(shè)置如何燎斩。
    disabledelayedexpansion: 禁用延遲的環(huán)境變量擴(kuò)展,直到出現(xiàn)匹配的 endlocal 命令蜂绎,無論 setlocal 命令之前的設(shè)置如何栅表。

  6. 為了能夠感知環(huán)境變量的動(dòng)態(tài)變化,批處理設(shè)計(jì)了變量延遲师枣。簡(jiǎn)單來說怪瓶,在讀取了一條完整的語句之后,不立即對(duì)該行的變量賦值践美,而會(huì)在某個(gè)單條語句執(zhí)行之前再進(jìn)行賦值洗贰,也就是說“延遲”了對(duì)變量的賦值找岖。
    examle:
    setlocal enabledelayedexpansion
    set a=4
    set a=5 & echo !a!
    結(jié)果: 5
    變量延遲的啟動(dòng)語句是“setlocal enabledelayedexpansion”,并且變量要用一對(duì)嘆號(hào)“!!”括起來
    由于啟動(dòng)了變量延遲敛滋,所以批處理能夠感知到動(dòng)態(tài)變化许布,即不是先給該行變量賦值,而是在運(yùn)行過程中給變量賦值绎晃,因此此時(shí)a的值就是5了
    另外爹脾,啟動(dòng)變量延遲,“%”的變量還是不變
    example2:
    setlocal enabledelayedexpansion
    for /l %%i in (1,1,5) do (
    set a=%%i
    echo !a!
    )
    結(jié)果箕昭,打印從1到5灵妨;如果不變量延遲,一個(gè)變量也沒有打印

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末落竹,一起剝皮案震驚了整個(gè)濱河市泌霍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌述召,老刑警劉巖朱转,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異积暖,居然都是意外死亡藤为,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門夺刑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缅疟,“玉大人,你說我怎么就攤上這事遍愿〈嬉” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵沼填,是天一觀的道長(zhǎng)桅咆。 經(jīng)常有香客問我,道長(zhǎng)坞笙,這世上最難降的妖魔是什么岩饼? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮薛夜,結(jié)果婚禮上籍茧,老公的妹妹穿的比我還像新娘。我一直安慰自己却邓,他們只是感情好硕糊,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布院水。 她就那樣靜靜地躺著腊徙,像睡著了一般简十。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撬腾,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天螟蝙,我揣著相機(jī)與錄音,去河邊找鬼民傻。 笑死胰默,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的漓踢。 我是一名探鬼主播牵署,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼喧半!你這毒婦竟也來了奴迅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤挺据,失蹤者是張志新(化名)和其女友劉穎取具,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扁耐,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暇检,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婉称。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片块仆。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖王暗,靈堂內(nèi)的尸體忽然破棺而出榨乎,到底是詐尸還是另有隱情,我是刑警寧澤瘫筐,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布蜜暑,位于F島的核電站,受9級(jí)特大地震影響策肝,放射性物質(zhì)發(fā)生泄漏肛捍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一之众、第九天 我趴在偏房一處隱蔽的房頂上張望拙毫。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馏谨。三九已至会放,卻和暖如春著摔,著一層夾襖步出監(jiān)牢的瞬間布蔗,已是汗流浹背衅码。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工拯刁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逝段。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓垛玻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親奶躯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帚桩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容