批處理BAT腳本中for命令的使用_第1頁
批處理BAT腳本中for命令的使用_第2頁
批處理BAT腳本中for命令的使用_第3頁
批處理BAT腳本中for命令的使用_第4頁
批處理BAT腳本中for命令的使用_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

/29 批處理BAT腳本中for命令的使用在線視頻分享約定專心聽就行了,不用著急做筆記。視頻和文檔會放到網(wǎng)上供大家免費下載。請不要使用音箱等外放設備,以免有回聲影響其他人,最好使用耳機。理論知識介紹完之后,隨機從論壇上找?guī)讉€帖子現(xiàn)場演示分析問題、解決問題的過程。內(nèi)容概要?for處理文件?for/d處理文件夾?for/r枚舉目錄樹處理文件?for/l處理數(shù)字序列?for/f處理字符串、命令輸出和文本內(nèi)容for命令的基本語法命令關鍵字:不區(qū)分大小寫命令關鍵字:不區(qū)分大小寫for%%variablein(set)docommand控制變量:控制變量:?區(qū)分大小寫?推薦使用單個英文字母?不建議使用數(shù)字?BAT腳本里面使用%%i?CMD窗口里面使用%i?僅在for循環(huán)內(nèi)部有效文件集合:?一個或多個文件?可以使用通配符?需要放在圓括號里面?不判斷文件是否真實存在需要執(zhí)行的命令:?多行命令需要放在圓括號里面?BAT腳本里面使用@echooff之后不需要使用多余的@來關閉回顯for命令處理文件@echooff@echoofffor%%iin(a.txt"bc.txt")do(echo正在處理:%%i)pause@echoofffor%%iin(*.txt??.log)do(echo正在處理:%%i)pauseC:\Test>test.bat正在處理:a.txt正在處理:"bc.txt"請按任意鍵繼續(xù)...C:\Test>test.bat正在處理:a.txt正在處理:bc.txt正在處理:1.log正在處理:20.log請按任意鍵繼續(xù)...?問號?表示零個或一個任意字符。?星號*表示零個或一個或多個任意字符。?這里的問號?和星號*是通配符,不是正則表達式。for命令的變量擴展@echooff@echoofffor%%iin("C:\ProgramFiles\7-Zip\(7z.exe")doecho文件:%%iecho刪除引號:%%~iecho文件所在的驅動器:%%~diecho文件所在的路徑:%%~piecho文件名:%%~niecho文件擴展名:%%~xiecho文件路徑的短名:%%~siecho文件的日期/時間:%%~tiecho文件的大小:%%~zi)pause@echoofffor%%iin("C:\ProgramFiles\7-Zip\z.exe")do(7echo文件:%%iecho文件所在的驅動器路徑:%%~dpiecho文件名和擴展名:%%~nxi)pause文件:"C:\ProgramFiles\7-Zip\7z.exe"刪除引號:C:\ProgramFiles\7-Zip\z.exe7文件所在的驅動器:C:文件所在的路徑:\ProgramFiles\7-Zip\文件名:7z文件擴展名:.exe文件路徑的短名:C:\PROGRA~1\7-Zip\7z.exe文件的日期/時間:2010/11/1821:08文件的大?。?84160請按任意鍵繼續(xù)...文件:"C:\ProgramFiles\7-Zip\7z.exe"文件所在的驅動器路徑:C:\ProgramFiles\7-Zip\文件名和擴展名:z.exe7?在CMD窗口中執(zhí)行for/?可以查看完整列表forfor命令的小技巧(1)?for命令不判斷文件是否真實存在@echoofffor%%iin()do(echoIP地址的前三段:%%~ni)pauseC:\Test>test.batIP地址的前三段:127.0.0請按任意鍵繼續(xù)...@echoofffor%%iin(3.1415926)do(echo浮點數(shù)的整數(shù)部分:%%~ni)pauseC:\Test>test.bat浮點數(shù)的整數(shù)部分:3請按任意鍵繼續(xù)...@echoofffor%%iin("C:\ProgramFiles\7-Zip")do(echo目錄的最后一級文件夾名稱:%%~nxi)pauseC:\Test>test.bat目錄的最后一級文件夾名稱:7-Zip請按任意鍵繼續(xù)...@echoofffor%%iin("C:\ProgramFiles\7-Zip\z.exe7\..")do(echo文件所在的文件夾:%%~nxi)pauseC:\Test>test.bat文件所在的文件夾:7-Zip請按任意鍵繼續(xù)...for命令的小技巧(2)@echooff@echoofffor%%iin(test.bat)doecho%%~ni?BAT腳本里面使用%%i?BAT腳本里面使用@echooff之后不需要使用多余的@關閉回顯for%iin(test.bat)do@echo%~ni?CMD窗口里面使用%i?命令前面可以使用@關閉回顯@echoofffor%%iin(*.txt)do(echo正在處理:%%iren"%%i""new_%%i")pause?小心文件集合重復處理的問題C:\Test>dir/b*.txt_1.txt00_2.txt_3.txt0C:\Test>test.bat正在處理:0_1.txt正在處理:0_2.txt正在處理:0_3.txt正在處理:new_0_1.txt請按任意鍵繼續(xù)...C:\Test>dir/b*.txtnew_0_2.txtnew_0_3.txtnew_new_0_1.txt經(jīng)常有人在論壇求助類似的問題/thread-34670-1-1.html內(nèi)容概要?for處理文件?for/d處理文件夾?for/r枚舉目錄樹處理文件?for/l處理數(shù)字序列?for/f處理字符串、命令輸出和文本內(nèi)容for/d命令的基本語法for/d%%variablein(set)docommand??結合通配符處理文件夾?不處理文件?不枚舉子文件夾?不處理隱藏文件夾?添加/r可以枚舉子文件夾@echoofffor/d%%iin("C:\Test\*")do(echo%%i)pause@echoofffor/r"C:\Test\"/d%%iin(*)do(echo%%i)pauseC:\Test>test.batC:\Test\Folder1C:\Test\Folder2請按任意鍵繼續(xù)...C:\Test>attribFolder3HC:\Test\Folder3C:\Test>test.batC:\Test\Folder1C:\Test\Folder2C:\Test\Folder1\Sub1_1請按任意鍵繼續(xù)...內(nèi)容概要?for處理文件?for/d處理文件夾?for/r枚舉目錄樹處理文件?for/l處理數(shù)字序列?for/f處理字符串、命令輸出和文本內(nèi)容for/r命令的基本語法for/r[[drive:]path]%%variablein(set)docommand?使用星號枚舉文件(遍歷子文件夾)?使用點號枚舉文件夾(遍歷子文件夾) @echooff @echoofffor/r"C:\Test\"%%iin(*.txt)do( for/r"C:\Test\"%%iin(.)do(echo%%i echo%%i ) ) pause pauseC:\Test>test.batC:\Test>test.batC:\Test\0.txt C:\Test\. C:\Test\Folder1\1_1.txt C:\Test\Folder1\. C:\Test\Folder1\Sub1_1\1_1_1.txt C:\Test\Folder1\Sub1_1\.C:\Test\Folder2\2_1.txt C:\Test\Folder2\.請按任意鍵繼續(xù)... C:\Test\Folder3\.請按任意鍵繼續(xù)...?不處理隱藏文件和文件夾。?小心文件集合重復處理的問題。?如果/r后面不指定路徑,默認處理當前文件夾。for/r命令的應用實例@echooffset"FileName=qq.exe"set"AllDrive=CDEFGHIJKLMNOPQRSTUVWXYZ"echo正在全盤搜索%FileName%,請稍候...for%%ain(%AllDrive%)do(ifexist%%a:\(pushd%%a:\for/r%%bin("*%FileName%")do(if/i"%%~nxb"equ"%FileName%"(echo,%%b))?echo命令和變量中間使用逗號,可以防止變量popd為空以及變量值是on或off的時候發(fā)生異常。?本文所有的腳本主要是為了展示語法,不一定是實現(xiàn)某個功能的最好的方法。))pause內(nèi)容概要?for處理文件?for/d處理文件夾?for/r枚舉目錄樹處理文件?for/l處理數(shù)字序列?for/f處理字符串、命令輸出和文本內(nèi)容for/l命令的基本語法for/l%%variablein(start,step,end)docommand起始值起始值步長終止值?死循環(huán)?步長不一定是1?步長可以是負數(shù)?遍歷完集合才退出@echoofffor/l%%iin()do(echoHello)pause@echooffecho1到10之間的偶數(shù):for/l%%iin(1,2,10)do(echo%%i)pause@echooffecho1到10倒序:for/l%%iin(10,-1,1)do(echo%%i)pause@echoofffor/l%%iin(1,1,999999)do(echo%%iif%%iequ4(goto:end)):endpausefor/l命令的應用實例@echooff ?\h/viewthread.php?tid=3774#pid2388使用set/p可以實現(xiàn)不換行輸出 \h8REM輸出九九乘法表for/l%%iin(1,1,9)do(setlocalenabledelayedexpansionfor/l%%jin(1,1,%%i)do(set/an=%%j*%%iset/p=%%j*%%i=!n!<nul ) ?在真正需要的時候才打開變量延遲擴展endlocal?及時關閉變量延遲擴展(尤其是在for循環(huán)內(nèi)部)echo,\h/thread\h-\h1224\h-\h1\h-\h1.html)?使用echo命令輸出空行的方法pause \h/thread\h-\h13860\h-\h1\h-\h1.html內(nèi)容概要?for處理文件?for/d處理文件夾?for/r枚舉目錄樹處理文件?for/l處理數(shù)字序列?for/f處理字符串、命令輸出和文本內(nèi)容for/f命令的基本語法for/f["options"]%%variablein(file-set)docommand文件集合文件集合for/f["options"]%%variablein("string")docommand字符串字符串for/f["options"]%%variablein('command')docommand命令的執(zhí)行結果命令的執(zhí)行結果for/f命令的選項eoleol=c 中文版系統(tǒng)幫助文檔太(Zhen)任(Keng)性(Die)指一個行注釋字符的結尾(就一個)specifiesanendoflinecommentcharacter(justone)@echooff @echooffREM默認忽略分號開頭的行 REM忽略指定字符開頭的行for/f%%iin(test.txt)do(for/f"eol=#"%%iin(test.txt)do(echo,%%i echo,%%i) )pause pauseC:\Test>typetest.txt C:\Test>test.bat C:\Test>typetest.txt C:\Test>test.bat;第1行默認注釋 #第2行自定義注釋 ;第1行默認注釋 ;第1行默認注釋#第2行自定義注釋 第3行正文 #第2行自定義注釋 第3行正文第3行正文 請按任意鍵繼續(xù)...第3行正文 請按任意鍵繼續(xù)...?所謂的endoflinecomment是一個專有名詞,它是一種注釋方法。意思是,如果某行以指定字符開頭,那么整行都是注釋。比如LinuxShell腳本里面的井號,VBS腳本里面的單引號,等等。與之相對應的,是類似C語言里面的/*xyz*/這種可以放到一行代碼中間的注釋方法。for/f命令的選項skipskip=nskip=n-指在文件開始時忽略的行數(shù)。@echooffREM跳過前兩行for/f"skip=2"%%iin(test.txt)do(echo,%%i)pause@echooffREM把兩個文件逐行合并成一列setn=0for/f%%iin(a.txt)do(call:MergeColumn%%n%%%%iset/an+=1)pausegoto:eof:MergeColumnif%1==0(set"myskip="(else)set"myskip=skip=%1")for/f"%myskip%"%%jin(b.txt)do(echo,%2%%jgoto:eof)C:\Test>typea.txt文件a第1行文件a第2行文件a第3行C:\Test>typeb.txt文件b第1行文件b第2行文件b第3行C:\Test>typetest.txt第1行第2行第3行第4行第5行C:\Test>test.bat文件a第1行文件b第1行文件a第2行文件b第2行文件a第3行文件b第3行請按任意鍵繼續(xù)...C:\Test>test.bat第3行第4行第5行請按任意鍵繼續(xù)...for/f命令的選項tokenstokens=x,y,mtokens=x,y,m-n-指定需要獲取的列C:\Test>typea.txtABCDEFGHIJKLMN@echooffREM默認獲取第一列for/f%%iin(a.txt)do(echo,%%i)pause@echooffREM逗號間隔,減號表示范圍for/f"tokens=1,3,5-7"%%iin(a.txt)do(echo,%%i%%j%%k%%l%%m)pause@echooffREM星號表示后面的所有列for/f"tokens=1,*"%%iin(a.txt)do(echo,%%iecho,%%j)pauseC:\Test>test.batA請按任意鍵繼續(xù)...C:\Test>test.batACEFG請按任意鍵繼續(xù)...C:\Test>test.batABCDEFGHIJKLMN請按任意鍵繼續(xù)...?列很多的情況:\h/thread\h-\h5548\h-\h1\h-\h1.html?獲取最后一列:\h/thread\h-\h13000\h-\h1\h-\h1.htmlfor/f命令的選項delimsdelims=xxxdelims=xxx-指定分隔符集。用來替換空格和跳格鍵(制表符)的默認分隔符集。-tokens和delims同時出現(xiàn)時,建議把delims放在tokens后面。C:\Test>typea.txtABC:D:EFG+H-IABCMNABCXYZ@echooffREM默認分隔符是空格和制表符for/f"tokens=3"%%iin(a.txt)do(echo,%%i)pause@echooffREM設置冒號為分隔符for/f"tokens=3delims=:"%%iin(a.txt)do(echo,%%i)pauseC:\Test>test.batC:D:E請按任意鍵繼續(xù)...C:\Test>test.batEFG+H-IABCMNABCXYZ請按任意鍵繼續(xù)...@echooffREM設置加號和減號為分隔符(如有空格請放在最后)for/f"tokens=3delims=+-"%%iin(a.txt)do(echo,%%i)pause@echooffREM不要企圖把字符串作為一個整體分隔符for/f"tokens=3delims=ABC"%%iin(a.txt)do(echo,%%i)pauseC:\Test>test.batIABCMNABCXYZ請按任意鍵繼續(xù)...C:\Test>test.bat:D:EFG+H-I請按任意鍵繼續(xù)...for/f命令tokens和delims小技巧C:C:\Test>typea.txtABC"DEF"Gabc"def"g123"456"7@echooffREM刪除空行并且刪除行首的空格或制表符for/f"tokens=*"%%iin(a.txt)do(echo,%%i)pauseC:\Test>test.batABC"DEF"Gabc"def"g1723"456"請按任意鍵繼續(xù)...@echooffREM刪除空行但是不刪除行首的空格或制表符for/f"delims="%%iin(a.txt)do(echo,%%i)pauseC:\Test>test.batABC"DEF"Gabc"def"g1723"456"請按任意鍵繼續(xù)...@echooffREM以雙引號作為列分隔符for/ftokens^=2^delims^=^"%%iin(a.txt)do(echo,%%i)pauseC:\Test>test.batDEFdef564請按任意鍵繼續(xù)...for/f命令的選項usebackqusebackqusebackq-允許在file-set中使用雙引號擴起文件名稱。C:\Test>type"a1.txt"ABCDEFG@echooffREM默認把雙引號里面的內(nèi)容當做字符串處理for/f"tokens=2"%%iin("a1.txt")do(echo,%%i)pause@echooffREM正確處理文件名包含空格的情況for/f"usebackqtokens=2"%%iin("a1.txt")do(echo,%%i)pauseC:\Test>test.bat1.txt請按任意鍵繼續(xù)...C:\Test>test.batB請按任意鍵繼續(xù)...?極少用到的usebackq知識點(不建議使用這種寫法):原來的("string")要把雙引號改為單引號('string')原來的('command')要把單引號改為后引號(`command`)for/f命令里面特殊字符要轉義@echoofffor/f"delims="%%iin('dir/b*.txt^|findstr"[0@echoofffor/f"delims="%%iin('dir/b*.txt^|findstr"[0-9]"')do(echo,%%i)pause@echoofffor/f"delims="%%iin('wmicLogicalDiskwhereDriveType^="3"getDeviceID')do(echo,%%i)pause@echoofffor/f"delims="%%iin('wmicNicConfiggetIPAddress^,MACAddress/value')do(echo,%%i)pause@echoofffor/f"delims="%%iin('dir/b/s/a-d"*.jpg"2^>nul')do(echo%%i)pause/thread-1290-2-16306.html#pid/thread-56922-1-232844.html#pid1/thread-56922-1-1.html#pid232844/thread-57460-1-1.html#pid234531小心處理文件擴展名??擴展名可能讓你處理到本來不想處理的文件@echoofffor/f"delims="%%iin('dir/b"*.htm"')do(echo,%%i)pauseC:\Test>test.bat1.htm2.html請按任意鍵繼續(xù)...@echoofffor/f"delims="%%iin('dir/b"*.htm"^|findstr"htm$"')do(echo,%%i)C:\Test>test.bat1.htm請按任意鍵繼續(xù)...?實際例子:\h/thread\h-\h32507\h-\h1\

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論