有没有办法从文件中提取/复制第一行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 "*****"