Windows バッチ ファイルを使用してテキスト ファイルから最初の行を読み取るにはどうすればよいですか? ファイルが大きいので、最初の行だけを扱いたいです。
16 に答える
え?imoこれははるかに簡単です
set /p texte=< file.txt
echo %texte%
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 のバッチ ファイル行の長さ制限も適用されます。
あー諸君…
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:\>
これを試してみてください:
@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
)
Thetalkingwalnut with answer Windows batch command(s) のおかげで、テキスト ファイルから最初の行を読み取ることができ、次の解決策を思いつきました。
@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
他の人の答えに少し基づいています。読み取り元のファイルと結果を入れる変数を指定できるようになりました。
@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.
> "を使用したstdoutリダイレクトに役立つ1つのライナー:
@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
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
バッチ ファイルのアプローチは、DOS コマンド プロセッサの行制限に制限されることに注意してください。コマンド行の長さの制限とは何ですか?を参照してください。.
そのため、 8192文字を超える行を含むファイルを処理しようとすると、値を保持できないため、スクリプトはそれらをスキップします。
別の方法
setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))