使用单个窗口命令从文件中提取N行

有没有办法从文件中提取/复制第一行X行,并使用Windows命令提示符通过单个命令将其input到另一个文件中?

我可以使用以下命令删除第一个X行:
more + X [file_containing data]> [file_to_export_data_to]

如果头部命令可以工作,我想我可以这样做:
头-X [包含文件的数据]> [file_to_export_data_to]

但是,不幸的是不工作。

如果Windows有一个“较less”的命令,但再次没有运气,这将是非常好的。

当谈到这个东西时,我是一个完全的新手,所以我敢肯定我错过了一些明显的东西。 我不想安装任何东西或使用命令提示符以外的东西。

谢谢

您可以从cmd.exe控制台使用PowerShell:

  powershell -command "& {get-content input.txt|select-object -first 10}" >output.txt 

您可以创建一个DOSKEY宏,使其更易于从命令行使用:

 doskey head=powershell -command "& {get-content $1|select-object -first $2}" 

用法:

 head input.txt 10 >output.txt 

但是,您不能在批处理脚本中使用DOSKEY宏。

您可以创建一个head.bat脚本,并将其放在PATH中包含的文件夹中:

head.bat

 @powershell -command "& {get-content %1|select-object -first %2}" 

从命令行,你可以使用head input.txt 10 >output.txt

从批处理脚本中,您可以使用call head input.txt 10 >output.txt

我选择不要输出文件作为参数,以防将结果显示在屏幕上,而不是写入文件。

最简单的一个命令解决方案是使用Powershell Get-Content。

N – 行数。

从文件开始:

 Get-Content -Head N file.txt 

从文件结尾:

 Get-Content -Tail N file.txt 
 (@FOR /f "tokens=1* delims=:" %a IN ('findstr /n "^" "standardwaffle.txt"') DO @IF %a leq 7 ECHO(%b)>u:\junk.txt 

会将standardwaffle.txt的前7行提取到u:\junk.txt所以这里是在一行代码中 – 但是我不敢勉强地输入。

它也将删除任何领导:在源代码行上。

 @ECHO OFF SETLOCAL IF %1 lss 0 (SET /a line=-%1) ELSE (SET /a line=%1) FOR /f "tokens=1* delims=:" %%a IN ('findstr /n "^" "%~2"') DO IF %%a leq %line% ECHO(%%b GOTO :EOF 

这个批处理,保存为head.bat放在你的路径上的任何地方,将允许你使用

 head -n standardwaffle.txt >junk.txt 

提取standardwaffle.txt的前n行到junk.txt

-将是可选的

但是这涉及在你的机器上安装批处理。 是否被你的“没有安装”的要求所禁止,或者是“安装”只适用于第三方公用事业?

 Set Inp = WScript.Stdin Set Outp = Wscript.Stdout x = 0 Do Until Inp.AtEndOfStream x = x + 1 OutP.WriteLine Inp.Readline If x = 5 then Exit Do Loop 

这打印行1到5.要使用

 cscript //nologo <path to script.vbs> <inputfile >outputfile 

为了获得正确的utf8输出,请在PowerShell中执行以下操作

 chcp 65001 $OutputEncoding = New-Object -typename System.Text.UTF8Encoding get-content input.txt -encoding UTF8 |select-object -first 10000 > output.txt 

这将得到前10000行input.txt(UTF8格式的文件)以正确的编码output.txt。

你可以使用这个:

 break>"%temp%\empty"&&fc "%temp%\empty" "%file_to_process%" /lb X /t |more +4 | findstr /B /E /V "*****" 

在那里你应该用你想要的线代替X.或命名为head.bat

 break>"%temp%\empty"&&fc "%temp%\empty" "%file_to_process%" /lb %~1 /t |more +4 | findstr /B /E /V "*****"