久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3121|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

批處理FOR命令詳解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:104287 發(fā)表于 2016-1-30 01:07 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 51黑fan 于 2016-1-30 01:09 編輯

對(duì)所有的批處理初學(xué)者來(lái)說(shuō),for的應(yīng)用是最難理解以及掌握的。本文由淺入深,為大家專門講解for的用法,希望大家喜歡。
首先應(yīng)該明確的是,for不是一個(gè)簡(jiǎn)單的命令,它的用法比較復(fù)雜,它還可以帶四個(gè)參數(shù)(/L /D /R /F),其中:/L和/F參數(shù)是最經(jīng)常用到的。當(dāng)然,它本身也可以不帶參數(shù),下面我們通過(guò)具體的例子來(lái)講解for的運(yùn)用。
一、不帶參數(shù)的for:

@echo off
for %%i in (1 2 3 4 5) do echo %%i
pause


將以上代碼保存為批處理文件(如何保存?),然后運(yùn)行,可以發(fā)現(xiàn)屏幕上顯示1 2 3 4 5(每字一行)
是不是明白了一些?它的整個(gè)運(yùn)行機(jī)制我們可以這樣看:for不停的從括號(hào)中拿出5個(gè)“東西”來(lái)(以空格做間隔),并將這5個(gè)“東西”依次傳給臨時(shí)變量%%i,同時(shí)把這個(gè)變量echo出來(lái)....
從這個(gè)例子我們可以看出,for的基本用法是:
for 變量 in (目標(biāo)) do 干什么?
變量常用%%i 來(lái)表示,當(dāng)然也可以換成%%j;目標(biāo)就是待處理的對(duì)象集合,比如這里的1 2 3 4 5;這里的干什么的內(nèi)容為:批處理命令。
【相關(guān)習(xí)題:】將你的名字用for命令分三行顯示出來(lái)!!!
二、帶參數(shù) /L 的for (這里的 參數(shù)/L 可以理解為 "list" 的意思,代表一個(gè)數(shù)列)
先看測(cè)試代碼: 復(fù)制內(nèi)容到剪貼板
代碼:

@echo off
for /l %%i in (1 1 5) do echo %%i
pause


顯示結(jié)果也為:1 2 3 4 5(每字一行)
它的意思和上面的意思差不多,但是括號(hào)中的對(duì)象卻不需要 寫成 1 2 3 4 5 的形式了,而是:1 1 5,因?yàn)樗鼏⒂昧藚?shù) /L ,就是告訴for,這個(gè)括號(hào)里的對(duì)象是個(gè)數(shù)列,怎樣的數(shù)列?就是以 1 開始,步長(zhǎng) 為1 ,結(jié)束值為5的一個(gè)等差數(shù)列,再舉個(gè)實(shí)例:復(fù)制內(nèi)容到剪貼板
代碼:
::顯示 從 10 - 20 的所有偶數(shù):

@echo off
for /l %%i in (10 2 20) do echo %%i
pause


【相關(guān)習(xí)題:】顯示 1~20 間能被5整 除的整數(shù)
三、帶參數(shù) /f 的for(這里的參數(shù)/F可以理解為“file”的意思,代碼處理對(duì)象為文本串)
參考教程:for 命令 /f 參數(shù) 通俗講解
四、for的 /D 和/R 參數(shù)(這兩個(gè)參數(shù)個(gè)人比較少用)
1>/D參數(shù)(常用來(lái)查詢 當(dāng)前目錄 或者 指定目錄的文件夾)
基本用法:FOR /D %variable IN (set) DO command [command-parameters]
如:查詢F盤根目錄下的文件夾 復(fù)制內(nèi)容到剪貼板
代碼:

@echo off
for /d %%i in (f:\*) do echo %%i
pause>nul


如果省略 括號(hào)中的 "f:\",則會(huì)直接查詢 批處理 所在目錄的文件夾
假設(shè) 本批處理文件 保存在:F:\test下
運(yùn)行以下批處理代碼,將會(huì)查詢 F:\test下的文件夾 復(fù)制內(nèi)容到剪貼板
代碼:
@echo off
for /d %%i in (*) do echo %%i
pause>nul2>



/r參數(shù)
基本用法:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
檢查以 [drive:]path 為根的目錄樹中,所有符合(set)的文件或者文件夾。如果在 /R 后沒(méi)有指定目錄,則使用當(dāng)前
目錄。如果集僅為一個(gè)單點(diǎn)(.)字符,則枚舉該目錄樹。
用法示例:
枚舉F:盤下所有的 文件 復(fù)制內(nèi)容到剪貼板
代碼:

@echo off
for /r f:\ %%i in (*) do echo %%i
pause>nul


枚舉F:盤下所有的 .bat文件(包括子目錄),則: 復(fù)制內(nèi)容到剪貼板
代碼:

@echo off
for /r f:\ %%i in (*.bat) do echo %%i
pause>nul


如果省略以上代碼中的F:\,則會(huì)列舉當(dāng)前目錄 所有符合(set)的文件
如:列舉批處理所在目錄的 所有 批處理文件(包括子目錄) 復(fù)制內(nèi)容到剪貼板
代碼:

@echo off
for /r %%i in (*.bat) do echo %%i
pause>nul



for 命令 /f 參數(shù) 通俗講解
for /f 參數(shù)最為復(fù)雜,難懂和常用.
在剛學(xué)時(shí)確實(shí)費(fèi)了我不少腦筋,下面就我個(gè)人的理解,給新手們通俗的講講,也好讓新手少走些彎路.
格式:
::例一: 復(fù)制內(nèi)容到剪貼板
代碼:

for /f "skip=1 tokens=1,2* delims= " %%a in (a.txt) do echo %%a %%b %%c
pause


先從引號(hào)內(nèi)的東西講起,很多新手對(duì)這些難以理解,因?yàn)?for /? 翻譯的簡(jiǎn)直是一塌糊涂.
skip=
tokens=
delims=
這三項(xiàng)是用的最多的,根據(jù)需要.可以不用,可以一起使用,也可以只使用一個(gè)或兩個(gè).
但是不管使用幾個(gè)都要用引號(hào)將它們擴(kuò)起來(lái).當(dāng)然不使用時(shí),自然就不需要引號(hào)了.
skip=
for循環(huán)文本內(nèi)容是以行為單位,從上至下進(jìn)行的,skip=1意識(shí)就是跳過(guò)文本的第一行,即不循環(huán)第一行
那么skip=2 自然就是跳過(guò)前兩行了,依次類推.........
delims=
先講這句
delims=后面的字符的意識(shí)是,將文本每一行的內(nèi)容以delims=后面的字符分割成若干列.
假設(shè)a.txt某一行的內(nèi)容是 111,222.333 444/555
我們用下面的語(yǔ)句
::例二: 復(fù)制內(nèi)容到剪貼板
代碼:

for /f "tokens=1-5 delims=,./ " %%a in (a.txt) do echo %%a %%b %%c %%d %%e
pause


顯示結(jié)果是 111 222 333 444 555
解釋:
意識(shí)就是把111,222.333 444/555以,./和空格(不分先后)分成了5列.注意代碼中/和"后面有個(gè)空格,
使用中要注意空格要放到最后,如"delims=,. /" 這樣就不行了.
那如果我們不使用逗號(hào)來(lái)分割會(huì)如何呢?如: "delims=./ "那么就會(huì)分割成111,222 333 444 555
看出區(qū)別了嗎?delims=后面可以是多個(gè)字符,可以是空格,也可以什么都沒(méi)有.
什么都沒(méi)有代表什么呢?就是不以任何東西為分割符,也是整行的內(nèi)容了.
因?yàn)閒or默認(rèn)是以,;和空格作分割符的,
所以一般要取得整行內(nèi)容通常會(huì)用"delims="這樣的形式來(lái)取消for的默認(rèn)分割符.
tokens=
tokens=1-5
1-5很好理解就1至5,前面我們用delims=后面的字符為分割符,將文本內(nèi)容分成了多列,那么你需要的是哪些列呢?
用tokens=可以很好幫你提取到.
還是以例二為例:
通過(guò)dilims=,./ 將文本分成了111 222 333 444 555 五列.
注意代碼中前面有個(gè)%%a 這里的%%a就是代表第一列,第二列就是%%b,第三列就是%%c 依此類推.....
那么我們?nèi)绻裡cho %%a %%b %%c %%d %%e 改為 echo %%e %%d %%c %%b %%a 會(huì)如何呢?
當(dāng)然.會(huì)顯示 555 444 333 222 111
如果是:echo %%b %%d 又會(huì)顯示什么呢? 不用我說(shuō)了吧!
若是第一個(gè)%%a把它改為%%i也是一樣,那么第二列就是%%j...%%k...依此類推....
明白了?就是按英文字母的順序依此類推的.
這里我們用的是tokens=1-5但是在例一中,我們用的是tokens=1,2* 有什么區(qū)別呢?
其實(shí)差不多-號(hào)代表從幾至幾而逗號(hào)代表單一的,如 tokens=1,5就是代表第一列和第五列,而不是1至5列.
*號(hào)代表剩下的所有的列.如:tokens=1,2*代表%%a為第一列,%%b為第二列,%%c代表后面所有的列.
for /f 不但可以循環(huán)文本內(nèi)容還可以循環(huán)字符竄,如:
::例三: 復(fù)制內(nèi)容到剪貼板
代碼:

for /f "tokens=1-3 delims=,./ " %%a in ("111,222.333 444/555") do echo %%a %%b %%c
pause


只要將()里的字符串用引號(hào)擴(kuò)起來(lái),for就會(huì)把它當(dāng)字符串來(lái)循環(huán),而不是文本.

這次的for語(yǔ)句系列教程,打算按照f(shuō)or語(yǔ)句的5種句式逐一展開,在講解 for /f 的時(shí)候,會(huì)穿插講解批處理中一個(gè)最為關(guān)鍵、也是新手最容易犯錯(cuò)的概念:變量延遲,大綱如下: 引用:
一 前言
二 for語(yǔ)句的基本用法
三 for /f (含變量延遲)
四 for /r
五 for /d
六 for /l
一、前言
在批處理中,for是最為強(qiáng)大的命令語(yǔ)句,它的出現(xiàn),使得解析文本內(nèi)容、遍歷文件路徑、數(shù)值遞增/遞減等操作成為可能;配合if、call、goto等流程控制語(yǔ)句,更是可以實(shí)現(xiàn)腳本復(fù)雜的自動(dòng)化、智能化操作;合理使用for語(yǔ)句,還能使代碼大為簡(jiǎn)化,免除各位編寫大量重復(fù)語(yǔ)句之苦。而能否熟練使用 for語(yǔ)句,已經(jīng)成為衡量一個(gè)人批處理水平高低最主要的標(biāo)準(zhǔn)。
二、for語(yǔ)句的基本用法
正如色彩繽紛的七彩光芒是由紅綠藍(lán)三原色構(gòu)成的一樣,最復(fù)雜的for語(yǔ)句,也有其基本形態(tài),它的模樣是這樣的:
在cmd窗口中: 復(fù)制內(nèi)容到剪貼板
代碼:
for %I in (command1) do command2在批處理文件中: 復(fù)制內(nèi)容到剪貼板
代碼:
for %%I in (command1) do command2之所以要區(qū)分cmd窗口和批處理文件兩種環(huán)境,是因?yàn)樵谶@兩種環(huán)境下,命令語(yǔ)句表現(xiàn)出來(lái)的行為雖然基本一樣,但是在細(xì)節(jié)上還是稍有不同,最明顯的一個(gè)差異就是:在cmd窗口中,for之后的形式變量I必須使用單百分號(hào)引用,即%I;而在批處理文件中,引用形式變量I必須使用雙百分號(hào),即%%I。為了方便起見(jiàn),若不是特別強(qiáng)調(diào),以下的講解都以批處理文件環(huán)境為例。
我們先來(lái)看一下for語(yǔ)句的基本要素都有些什么: 引用:
  1、for、in和do是for語(yǔ)句的關(guān)鍵字,它們?nèi)齻(gè)缺一不可;
2、%%I是for語(yǔ)句中對(duì)形式變量的引用,就算它在do后的語(yǔ)句中沒(méi)有參與語(yǔ)句的執(zhí)行,也是必須出現(xiàn)的;
3、in之后,do之前的括號(hào)不能省略;
4、command1表示字符串或變量,command2表示字符串、變量或命令語(yǔ)句;現(xiàn)在,你可能已經(jīng)會(huì)寫一個(gè)簡(jiǎn)單的for語(yǔ)句了,比如:
[example1] 復(fù)制內(nèi)容到剪貼板
代碼:

@echo off
for %%I in (www.zg4o1577.cn) do echo %%I
pause


保存為批處理文件并執(zhí)行,將會(huì)在彈出的批處理窗口中看到這樣的信息: 引用:
www.zg4o1577.cn
請(qǐng)按任意鍵繼續(xù)...很快地,你會(huì)覺(jué)得這個(gè)for語(yǔ)句是如此的簡(jiǎn)單,簡(jiǎn)單到你絲毫感受不出它的強(qiáng)大:這個(gè)for語(yǔ)句,和我直接用echo語(yǔ)句沒(méi)什么兩樣啊!
是的,演示代碼永遠(yuǎn)都只是演示而已,就像大多數(shù)高級(jí)語(yǔ)言的教科書一樣,在引導(dǎo)新手學(xué)習(xí)的時(shí)候,基本上都是千篇一律地告訴大家如何編寫一個(gè)能顯示 hello world! 的窗口,從這些演示代碼中,你看不到它們具有多少實(shí)用性,你只是感到有點(diǎn)好奇:咦,居然彈出了一個(gè)窗口?片刻之后,你就會(huì)覺(jué)得索然無(wú)味。
那好吧,為了讓大家對(duì)for更加感興趣,我們先來(lái)分析一下for語(yǔ)句的一些注意事項(xiàng),之后,再讓大家看看更為強(qiáng)大的for語(yǔ)句實(shí)例。
引用:
1、 for語(yǔ)句的形式變量I,可以換成26個(gè)字母中的任意一個(gè),這些字母會(huì)區(qū)分大小寫,也就是說(shuō),%%I和%%i會(huì)被認(rèn)為不是同一個(gè)變量;形式變量I還可以換成其他的字符,但是,為了不與批處理中的%0~%9這10個(gè)形式變量發(fā)生沖突,請(qǐng)不要隨意把%%I替換為%%0 ~%%9中的任意一個(gè);
2、in和do之間的command1表示的字符串或變量可以是一個(gè),也可以是多個(gè),每一個(gè)字符串或變量,我們稱之為一個(gè)元素,每個(gè)元素之間,用空格鍵、跳格鍵、逗號(hào)或等號(hào)分隔;
3、for語(yǔ)句依次提取command1中的每一個(gè)元素,把它的值賦予形式變量I,帶到do后的command2中參與命令的執(zhí)行;并且每次只提取一個(gè)元素,然后執(zhí)行一次do后的命令語(yǔ)句,而無(wú)論這個(gè)元素是否被帶到command2中參與了command2的運(yùn)行;當(dāng)執(zhí)行完一次do后的語(yǔ)句之后,再提取command1中的下一個(gè)元素,再執(zhí)行一次command2,如此循環(huán),直到command1中的所有元素都已經(jīng)被提取完畢,該for語(yǔ)句才宣告執(zhí)行結(jié)束;其中,第3點(diǎn)是最為關(guān)鍵的,它描述了for語(yǔ)句的執(zhí)行過(guò)程,是for語(yǔ)句的精髓所在,大家一定要牢記這一條,才能深刻理解更為復(fù)雜的for流程。
有了以上的基礎(chǔ),我們?cè)賮?lái)看一個(gè)例子,這個(gè)例子修改了example1的部分內(nèi)容,結(jié)果將大不一樣:
[example2] 復(fù)制內(nèi)容到剪貼板
代碼:

@echo off
for %%I in (www,51hei,com) do echo %%I
pause


和example1的執(zhí)行結(jié)果相比,example2發(fā)生了如下變化:
1、顯示結(jié)果分成了3行(不算最后一行中文提示);
2、每一行都從逗號(hào)處被切分;
如果把 bbs*bathome*cn 這個(gè)字符串中的點(diǎn)號(hào)換為空格、跳格或等號(hào),執(zhí)行結(jié)果將和example2的執(zhí)行結(jié)果別無(wú)二致。
現(xiàn)在,我們來(lái)分析一下example2代碼中for語(yǔ)句的執(zhí)行過(guò)程:
首先,for語(yǔ)句以逗號(hào)為分隔符,把 bbs,bathome,cn 這個(gè)字符串切分成三個(gè)元素:bbs、bathome和cn,由此決定了do后的語(yǔ)句將會(huì)被執(zhí)行3次;
然后,第一次執(zhí)行過(guò)程是這樣的:先把 bbs 這個(gè)字符串作為形式變量I的值,帶入do后的語(yǔ)句中加以執(zhí)行,也就是執(zhí)行 echo %%I 語(yǔ)句,此時(shí)的I值為bbs,因此,第一次執(zhí)行的結(jié)果,將會(huì)在屏幕上顯示bbs這個(gè)字符串;第二次執(zhí)行和第一次執(zhí)行的過(guò)程是一樣的,只不過(guò)此時(shí)I的值已經(jīng)被替換為command1中的第二個(gè)元素了,也就是 bathome 這個(gè)字符串;如此循環(huán),當(dāng)?shù)谌蝒cho執(zhí)行完畢之后,整條for語(yǔ)句才算執(zhí)行完畢,此時(shí),將執(zhí)行下一條語(yǔ)句,也就是pause命令。
其實(shí),這個(gè)例子只比上一個(gè)例子多了一點(diǎn)花樣,有趣了那么一點(diǎn)點(diǎn):一條for語(yǔ)句的執(zhí)行結(jié)果居然被分成了3行!
為了讓大家見(jiàn)識(shí)一下for的真正威力,本人絞盡腦汁,翻帖無(wú)數(shù),不得要領(lǐng),萬(wàn)般無(wú)奈之下,只好亮出了塵封在箱底多年的一段代碼:檢測(cè)當(dāng)前硬盤都有哪些分區(qū)^_^
[example3] 復(fù)制內(nèi)容到剪貼板
代碼:

@echo off
set str=c d e f g h i j k l m n o p q r s t u v w x y z
echo 當(dāng)前硬盤的分區(qū)有:
for %%i in (%str%) do if exist %%i: echo %%i:
pause


這段代碼能檢測(cè)硬盤都有哪些分區(qū),包括U盤和移動(dòng)硬盤的分區(qū),但是,當(dāng)光驅(qū)中有盤的時(shí)候,也會(huì)被列出來(lái),


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级毛片久久99精品蜜桃 | 九九亚洲 | 亚洲成人黄色 | 香蕉久久a毛片 | 日韩视频在线观看中文字幕 | 三级黄色片在线播放 | av日日操| 国产美女久久 | 久久福利电影 | 精品久久久久久国产 | 鸡毛片| 日本黄色免费视频 | 岛国午夜 | 国产真实乱对白精彩久久小说 | 国产精品久久久久久久久久免费 | 中文字幕乱码视频32 | 久久精品色欧美aⅴ一区二区 | 日日夜夜影院 | 国产日韩欧美在线 | 97精品国产97久久久久久免费 | 色站综合 | 亚洲精品久久久蜜桃网站 | 国产在线精品一区二区三区 | 久久久久久久久精 | 成人欧美一区二区三区黑人孕妇 | 欧美综合在线观看 | 日韩中文av在线 | 视频在线观看亚洲 | 欧美在线不卡 | 亚洲精视频 | 爱爱爱av | 高清国产午夜精品久久久久久 | 日韩精品在线观看一区二区 | 国产精品视频一二三区 | 成人国产精品入口免费视频 | 日韩在线观看网站 | 色噜噜亚洲男人的天堂 | 国产视频黄色 | 日韩精品久久一区二区三区 | 欧美激情亚洲激情 | 中文字幕亚洲欧美日韩在线不卡 |