如何使用Windows批处理文件从文本文件中读取第一行?由于文件很大,所以我只想处理第一行。
如何使用Windows批处理文件从文本文件中读取第一行?由于文件很大,所以我只想处理第一行。
Answers:
这是一个通用批处理文件,用于打印n
GNUhead
实用程序之类的文件中的顶行,而不仅仅是一行。
@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。
;
(默认为FOR / F EOL字符)开头的行。如果要求输入10行,则它将打印不为空且开头不是的前10行;
。
呃你们...
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:\>
findstr "^1:"
并获得双引号的温暖和保护。或者,如果您不屑一顾像我这样的名言,并想过着危险的生活,请使用findstr /b 1:
findstr ^^1
。
set /p
对于大型文件,该解决方案效率更高。
您可以尝试一下:
@echo off
for /f %%a in (sample.txt) do (
echo %%a
exit /b
)
编辑 或者,假设您有四列数据,并且想要从第5行到底部,请尝试以下操作:
@echo off
for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
echo %%a %%b %%c %%d
)
"delims="
以打印出完整的文件夹名称以及空格。
多亏了talkingwalnut可以回答Windows批处理命令,以便从文本文件中读取第一行,所以我提出了以下解决方案:
@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.
试试这个
@echo off
setlocal enableextensions enabledelayedexpansion
set firstLine=1
for /f "delims=" %%i in (yourfilename.txt) do (
if !firstLine!==1 echo %%i
set firstLine=0
)
endlocal
EXIT /B
当更实际地将批处理文件作为批处理文件的一部分时,解决方案的问题如下。之后的批处理文件中没有后续处理EXIT /B
。通常,批处理不仅仅是一项有限的任务。
为了解决这个问题:
@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
要cicle文件(file1.txt
,file1[1].txt
,file1[2].txt
等):
START/WAIT C:\LAERCIO\DELPHI\CICLADOR\dprCiclador.exe C:\LAERCIUM\Ciclavel.txt
rem set/p ciclo=< C:\LAERCIUM\Ciclavel.txt:
set/p ciclo=< C:\LAERCIUM\Ciclavel.txt
rem echo %ciclo%:
echo %ciclo%
它正在运行。
set /p
通过提示询问;但是,通过文件重定向,<
它会立即在提示符下获取文件的内容;当第一行以行结尾时,提示将停止读取,因此仅将第一行存储在变量中。
请注意,批处理文件的方法将限于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
))