![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-28 02:16 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,277 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 用for指令,從一個文本文件讀取某一行之疑問 |
| 可打印版本 1,368 / 7 |
| 第1楼 yc421206 | 发表于 2007-01-25 12:17 |
| 初级用户 发帖 21 积分 52 | |
|
用for指令,從一個文本文件讀取某一行之疑問 DEAR ALL:
小弟日前在版上搜集到的一個帖子,這帖子讓我受用無盡,但還有許多地方不明白,懇請諸位先進不吝惜指教,謝謝! 這一頁告訴大家如何從一個文本文件讀取某一行. 這裡有很多方法可以使用 for/f 讀取 input.txt 的內容,例如: for /f "delims=" %%a in (input.txt) do ... for /f "delims=" %%a in ('type input.txt') do ... for /f "delims=" %%a in ('more ^< input.txt') do ... 不過,只有最後一種方法(使用 more 命令) 可以在不同的操作系統中如:Windows NT, 2000, XP and 2003 取得一致的結果。第一種方法不能識別UNICODE編碼文件,並且, 如果輸入文件名包含空格,usebackq 參數必須被使用,第二個方法, 使用 type 命令, 在 windows2000, XP 和 2003 中如果文件不是從字節序標記(BOM)開始 ,同樣不識別unicode 文件。 在所有例子中,假設numbers.txt的內容為: one two three four five six seven eight nine ten 顯示第一行 這個例子輸出 one。 @echo off & setlocal ENABLEEXTENSIONS set "first=" for /f "delims=" %%a in ('more ^< numbers.txt') do ( if not defined first set first=%%a ) echo/%first% ============================================== 為什麼定義了if not defined first set first=%%a,就只會顯示第一行呢 ============================================== 顯示前幾行 這個例子輸出 one, two 和 three。 @echo off & setlocal ENABLEEXTENSIONS set "lines=3" set i=-1 set "ok=" for /f "delims=" %%a in ('more ^< numbers.txt') do ( set/a i+=1 & for /f %%z in ('echo/%%i%%') do ( if "%%z"=="%lines%" set ok=1 ) if not defined ok echo/%%a ) ============================================== set/a i+=1→這句該如何解釋,可否提供相關文章說明,因為我找了很多卻找不到。 ('echo/%%i%%')→這句該如何解釋 ============================================== 顯示最後一行 這個例子輸出 ten。 @echo off & setlocal ENABLEEXTENSIONS for /f "delims=" %%a in ('more ^< numbers.txt') do set "last=%%a" echo/%last% 顯示最後幾行 這個例子輸出 nine 和 ten。 @echo off & setlocal ENABLEEXTENSIONS set "lines=2" for /f %%a in ('find/c /v "" ^< numbers.txt') do set/a skip=%%a-lines for /f "delims=" %%a in ('more/e +%skip% ^< numbers.txt') do ( echo/%%a ) ============================================== ('find/c /v "" ^< numbers.txt')→這句該如何解釋。 ('more/e +%skip% ^< numbers.txt')→這句該如何解釋 ============================================== 顯示第 n 行 這個例子輸出three,注意這裡使用more的 /e 參數 來跳過指定的行數,配合for/f 使用,當數值小於1時會失敗。 @echo off & setlocal ENABLEEXTENSIONS set LineNo=3 set "line=" set/a LineNo-=1 for /f "delims=" %%a in ('more/e +%LineNo% ^< numbers.txt') do ( if not defined line set "line=%%a" ) echo/%line% 顯示第 n 行加上 X 行 這個例子輸出five和six。 @echo off & setlocal ENABLEEXTENSIONS set start=5 set "lines=2" set/a i=-1,start-=1 set "ok=" for /f "delims=" %%a in ('more/e +%start% ^< numbers.txt') do ( set/a i+=1 & for /f %%z in ('echo/%%i%%') do ( if "%%z"=="%lines%" set ok=1 ) if not defined ok echo/%%a ) ============================================== ('more/e +%start% ^< numbers.txt')→這句該如何解釋。 ('echo/%%i%%')→這句該如何解釋 ============================================== 以上,麻煩諸位幫忙了,謝謝!:) |
|
| 第2楼 yc421206 | 发表于 2007-01-26 22:56 |
| 初级用户 发帖 21 积分 52 | |
|
沒人幫我><
自己頂一下 懇請版上高手為我解答阿>< 2007-01-27 [ Last edited by yc421206 on 2007-1-27 at 02:30 PM ] |
|
| 第3楼 yc421206 | 发表于 2007-01-29 14:00 |
| 初级用户 发帖 21 积分 52 | |
|
沒有人肯幫我嗎~
再頂 |
|
| 第4楼 NaturalJ0 | 发表于 2007-01-29 22:09 |
| 银牌会员 发帖 533 积分 1,181 | |
|
@echo off & setlocal ENABLEEXTENSIONS
set "first=" for /f "delims=" %%a in ('more ^< numbers.txt') do ( if not defined first set first=%%a ) echo/%first% ============================================== 為什麼定義了if not defined first set first=%%a,就只會顯示第一行呢 ============================================== 因为 echo 不在 FOR 里面,只执行了一次,输出的是 FOR 中存的第一行。 ============================================== set/a i+=1→這句該如何解釋,可否提供相關文章說明,因為我找了很多卻找不到。 ('echo/%%i%%')→這句該如何解釋 ============================================== set/a i+=1 就相当于 set /a i=%i%+1 %%i%% 是因为要多用一层“解释” ============================================== ('find/c /v "" ^< numbers.txt')→這句該如何解釋。 ('more/e +%skip% ^< numbers.txt')→這句該如何解釋 ============================================== 第一句好像是查总共有多少行 第二句是跳过开头 skip 行 仅供参考,可能有误。 |
|
| 第5楼 yc421206 | 发表于 2007-01-29 22:49 |
| 初级用户 发帖 21 积分 52 | |
Originally posted by NaturalJ0 at 2007-1-29 22:09: 謝謝您的解答,小弟受教了 |
|
| 第6楼 stance | 发表于 2008-05-04 14:35 |
| 初级用户 发帖 46 积分 64 | |
|
謝謝NaturalJ0,以前也見過%%i%%,想得頭都大了也沒想明白。
|
|
| 第7楼 nipo | 发表于 2008-05-12 00:09 |
| 中级用户 发帖 106 积分 228 | |
|
按照这里的说法,在处理UNICODE字符方面,more比type还好用。
|
|
| 第8楼 106942397 | 发表于 2008-05-12 09:55 |
| 初级用户 发帖 15 积分 29 | |
|
我不懂'more ^< numbers.txt'和'type input.txt'
有什么区别..... 我想知: 第一種方法不能識別UNICODE編碼文件 UNICODE編碼文件是什么?? 楼主能不能复几句出来呀??? |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |