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
)
@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
)
@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
)
[ Last edited by yc421206 on 2007-1-27 at 02:30 PM ]作者: yc421206 时间: 2007-1-29 14:00 沒有人肯幫我嗎~
再頂作者: NaturalJ0 时间: 2007-1-29 22:09 @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 中存的第一行。
Originally posted by NaturalJ0 at 2007-1-29 22:09:
@echo off & setlocal ENABLEEXTENSIONS
set "first="
for /f "delims=" %%a in ('more ^< numbers.txt') do (
if not defined first set first=%%a
)
echo/%first%