91

Windows バッチ ファイルを使用してテキスト ファイルから最初の行を読み取るにはどうすればよいですか? ファイルが大きいので、最初の行だけを扱いたいです。

4

16 に答える 16

235

え?imoこれははるかに簡単です

  set /p texte=< file.txt  
  echo %texte%
于 2011-10-19T19:49:31.640 に答える
52

n以下は、GNUheadユーティリティのようなファイルから、1 行だけではなく、先頭行を出力するための汎用バッチ ファイルです。

@echo off

if [%1] == [] goto usage
if [%2] == [] goto usage

call :print_head %1 %2
goto :eof

REM
REM print_head
REM Prints the first non-blank %1 lines in the file %2.
REM
:print_head
setlocal EnableDelayedExpansion
set /a counter=0

for /f ^"usebackq^ eol^=^

^ delims^=^" %%a in (%2) do (
        if "!counter!"=="%1" goto :eof
        echo %%a
        set /a counter+=1
)

goto :eof

:usage
echo Usage: head.bat COUNT FILENAME

例えば:

Z:\>head 1 "test file.c"
; this is line 1

Z:\>head 3 "test file.c"
; this is line 1
    this is line 2
line 3 right here

現在、空白行はカウントされません。また、8 KB のバッチ ファイル行の長さ制限も適用されます。

于 2008-09-24T22:20:14.950 に答える
23

あー諸君…

C:\>findstr /n . c:\boot.ini | findstr ^1:

1:[boot loader]

C:\>findstr /n . c:\boot.ini | findstr ^3:

3:default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

C:\>
于 2011-07-26T02:00:59.927 に答える
11

これを試してみてください:

@echo off

for /f %%a in (sample.txt) do (
  echo %%a
  exit /b
)

編集 または、4 列のデータがあり、5 行目から一番下までが必要な場合は、次のようにします。

@echo off

for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
  echo %%a %%b %%c %%d
)
于 2008-09-24T21:42:42.247 に答える
6

Thetalkingwalnut with answer Windows batch command(s) のおかげで、テキスト ファイルから最初の行を読み取ることができ、次の解決策を思いつきました。

@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
于 2008-09-24T21:55:41.310 に答える
4

他の人の答えに少し基づいています。読み取り元のファイルと結果を入れる変数を指定できるようになりました。

@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)

これは、上記を次のように使用できることを意味します (getline.bat と呼ぶと仮定します)。

c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable  
variable= Volume in drive C has no label.
于 2008-09-24T22:09:36.207 に答える
3

> "を使用したstdoutリダイレクトに役立つ1つのライナー:

@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
于 2008-09-24T22:41:02.700 に答える
1

EXIT /Bより現実的には、バッチ ファイルの一部としてバッチ ファイル内にある場合のソリューションの問題は次のとおりです。の後に、上記のバッチ ファイル内に後続の処理はありませんEXIT /B。通常、バッチには、限られた 1 つのタスクだけでなく、さらに多くの機能があります。

その問題に対抗するには:

@echo off & setlocal enableextensions enabledelayedexpansion
set myfile_=C:\_D\TEST\My test file.txt
set FirstLine=
for /f "delims=" %%i in ('type "%myfile_%"') do (
  if not defined FirstLine set FirstLine=%%i)
echo FirstLine=%FirstLine%
endlocal & goto :EOF

(ただし、いわゆる毒キャラはやはり問題になります。)

バッチコマンドで特定の行を取得する件名の詳細:

テキスト ファイルの n 行目、最初の行、最後の行を取得するにはどうすればよいですか?" http://www.netikka.net/tsneti/info/tscmd023.htm

[2012 年 8 月 28 日追加]次のものも使用できます。

@echo off & setlocal enableextensions
set myfile_=C:\_D\TEST\My test file.txt
for /f "tokens=* delims=" %%a in (
  'type "%myfile_%"') do (
    set FirstLine=%%a& goto _ExitForLoop)
:_ExitForLoop
echo FirstLine=%FirstLine%
endlocal & goto :EOF
于 2012-07-25T16:37:49.680 に答える
0

バッチ ファイルのアプローチは、DOS コマンド プロセッサの行制限に制限されることに注意してください。コマンド行の長さの制限とは何ですか?を参照してください。.

そのため、 8192文字を超える行を含むファイルを処理しようとすると、値を保持できないため、スクリプトはそれらをスキップします。

于 2009-09-02T04:12:36.110 に答える
0

別の方法

setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))
于 2018-02-27T06:52:52.137 に答える