(六)綜合應(yīng)用與思考
1、例:將日期中的“-”換成“/”。如將“2009-01-14”改成“2009/01/14”。
@echo off
echo %date%
pause
for /f "tokens=1,2,3 delims=- " %%a in ('date/t') do @echo %%a/%%b/%%c
pause>nul
講解:先用分隔符命令delims屏蔽掉原來的“-”,然后再echo部分用“/”隔開輸出變量。
2、例:提取歌曲名字。現(xiàn)有一歌曲文本“歌曲列表.txt”,要求從該列表中提取歌名。
“歌曲列表.txt”如下:
2008-04-28 22:19 2,065,777 饒?zhí)炝?/span>-玫瑰愛人.wma
2007-10-15 21:09 3,485,010 高一首 我不愿錯(cuò)過.mp3
2008-10-27 12:25 7,727,549 黃凱芹 傷感的戀人.MP3
2008-11-29 23:56 1,273 黃燦 黃玫瑰.lrc
2008-07-24 20:07 4,129,819 黎姿 如此這般的愛情故事.mp3
代碼:
@echo off
for /f "tokens=4-6 delims=. " %%i in (歌曲列表.txt) do echo %%i %%j %%k
pause>nul
講解:
首先,Delims用點(diǎn)號(hào)和空格(點(diǎn)號(hào)后面有一個(gè)空格)作為分隔符,將上述文本分成4個(gè)小節(jié):
第一小節(jié) “2008-04-28”——日期
第二小節(jié) “22:19”——時(shí)間
第三小節(jié) “2,065,777” ——大小
第四小節(jié) “饒?zhí)炝?/span>-玫瑰愛人.wma”——歌手和歌名
有些歌手與歌名之間含有空格,如“高一首 我不愿錯(cuò)過.mp3”,那么它們也被拆分成兩節(jié),即:
第四小節(jié) “高一首”——歌手
第五小節(jié) “我不愿錯(cuò)過.mp3”——歌曲名
其次,用tokens提取每行的第四、五、六小節(jié)(豎豎看就是列),即歌手和歌名。
最后顯示echo出來。
%%i代表顯示提取到的第四列;
%%j代表顯示提取到的第五列;
%%k代表顯示提取到的第六列。
注意:
本命令無法忽略擴(kuò)展名,也就是無法去掉歌曲的后綴.mp3,試了半天都不行。
如果需要保留擴(kuò)展名可以同時(shí)去掉“delims=.”和“%%k”。
將“tokens=4-6”改成“tokens=4,5”并刪掉%%k似乎可以,但有些第五列仍是歌名或者是后綴名。
單獨(dú)用“delims=.”可以去掉,單獨(dú)用“tokens=4-6”也可以使用,唯獨(dú)將兩者放在一起時(shí)出現(xiàn)了問題。
“delims=.”點(diǎn)號(hào)后面有一個(gè)空格,缺乏空格會(huì)無法顯示。
“tokens=4-6”和“delims=.”之間要用一個(gè)空格隔開,前后順序不能顛倒,否則無法正常顯示。
如要去掉擴(kuò)展名,還得使用擴(kuò)充變量~n:
@echo off
for /f "tokens=4-6" %%i in (歌曲列表.txt) do echo %%~ni %%~nj %%~nk
pause>nul
3、例:在屏幕上完整顯示“偉大的中國(guó)人民萬(wàn)歲 萬(wàn)歲 萬(wàn)萬(wàn)歲”。
(1)不使用/f參數(shù):
@echo off
for %%a in (偉大的中國(guó)人民萬(wàn)歲 萬(wàn)歲 萬(wàn)萬(wàn)歲) do echo.%%a
echo.
echo 不使用/f參數(shù),分節(jié)、分行顯示。
pause>nul
注意:
如果使用雙引號(hào),能夠成功顯示結(jié)果,但結(jié)果也帶有雙引號(hào),不夠完美。
(2)不使用usebackq:
@echo off
for /f %%a in ("偉大的中國(guó)人民萬(wàn)歲 萬(wàn)歲 萬(wàn)萬(wàn)歲") do echo.%%a
echo.
echo 不使用usebackq,只顯示第一小節(jié)
pause>nul
(3)不使用delims:
@echo off
for /f "usebackq" %%a in ('偉大的中國(guó)人民萬(wàn)歲 萬(wàn)歲 萬(wàn)萬(wàn)歲') do echo.%%a
echo.
Echo 不使用delims,只顯示第一小節(jié)。
pause>nul
顯示結(jié)果:
偉大的中國(guó)人民萬(wàn)歲
系統(tǒng)找不到文件 Ÿ 。
注意:
echo.%%a之間有一個(gè)點(diǎn)號(hào)。為什么?你再增加一個(gè)進(jìn)去看看……
“Ÿ ”這是什么東西?
當(dāng)你刪除echo.%%a之間有一個(gè)點(diǎn)號(hào)結(jié)果就會(huì)變成“Ÿ Ÿ? ”。
修改一下,加入“delims=”。
(4)使用delims=以后:
@echo off
for /f "usebackq delims=" %%a in ('偉大的中國(guó)人民萬(wàn)歲 萬(wàn)歲 萬(wàn)萬(wàn)歲') do echo %%a
pause>nul
顯示結(jié)果:
偉大的中國(guó)人民萬(wàn)歲 萬(wàn)歲 萬(wàn)萬(wàn)歲
為什么加了delims后就能能夠成功顯示?
思考:如果把單引號(hào)改成雙引號(hào)或后引號(hào)會(huì)怎么樣呢?
4、例:編輯“朱子家訓(xùn).txt”:
朱子家訓(xùn)
朱熹
黎明即起,灑掃庭除,要內(nèi)外整潔。
既昏便息,關(guān)鎖門戶,必親自檢點(diǎn)。
一粥一飯,當(dāng)思來處不易;半絲半縷,恒念物力維艱。
宜未雨而綢繆,毋臨渴而掘井。
自奉必須儉約,宴客切勿留連。
器具質(zhì)而潔,瓦缶勝金玉。
飲食約而精,園蔬勝珍饈。
勿營(yíng)華屋,勿謀良田。
(1)單純使用FOR /F即可完整顯示內(nèi)容。
代碼1:
@echo off
for /f %%a in (朱子家訓(xùn).txt) do echo %%a
pause>nul
注意:默認(rèn)自動(dòng)取消空行。
(2)使用delims定義分隔符,并屏蔽分隔符(標(biāo)點(diǎn)),切分字符串。只顯示每行的第一節(jié)。
代碼2:
@echo off
for /f "delims=,;" %%a in (朱子家訓(xùn).txt) do echo %%a
pause>nul
(3)使用tokens挑選每行要顯示的小節(jié)。顯示所有內(nèi)容。
@echo off
for /f "tokens=1-4 delims=,;。" %%a in (朱子家訓(xùn).txt) do echo %%a %%b %%c %%d
pause>nul
只顯示第二列和第四列的內(nèi)容,注意對(duì)比內(nèi)容。
代碼:
@echo off
for /f "tokens=2,4 delims=,;。" %%a in (朱子家訓(xùn).txt) do echo %%a %%b
pause>nul
5、比較試驗(yàn):
@echo off
for /f %%I in (變量.txt) do echo %%~I
pause>nul
注意:
請(qǐng)修改本命令做試驗(yàn),如:
如果不使用參數(shù)將顯示“變量.txt”。
如果使用/d顯示“變量.txt”。
如果使用/r則列舉當(dāng)前目目錄以及當(dāng)前目錄下的文件夾。
如果使用/f則顯示文本內(nèi)容。
通過試驗(yàn)比較,更好的體驗(yàn)各個(gè)參數(shù)的意義。同時(shí)明白,批處理的命令并非一成不變的,它小巧而靈活,神通而廣大。
聯(lián)系客服