太深奥了, 看不懂啊!
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
精华I
查看 12,413 回复 19
这一页告诉大家如何从一个文本文件读取某一行. 这里有很多方法可以使用 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%
显示前几行
这个例子输出 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
)
显示最后一行
这个例子输出 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
)
显示第 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
)