有没有办法从文件中提取/复制第一行X行,并使用windows命令提示符使用单个命令将它们输入到另一个文件中?
我可以使用以下方法删除前X行数:
更多+ X [file_containing data]> [file_to_export_data_to]
如果头部命令有效,我想我可以这样做:
head -X [file_containing data]> [file_to_export_data_to]
但不幸的是,这不起作用。
如果Windows有一个更少的"那将是很好的。命令但又没有运气。
对于这些东西,我是一个完整的新手,所以我确定我错过了一些明显的东西。我不想安装任何东西或使用命令提示符以外的东西。
由于
答案 0 :(得分:17)
您可以从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
我选择不将输出文件作为参数,以防您只想将结果显示在屏幕上而不是写入文件。
答案 1 :(得分:17)
the simplest one-command solution is to use Powershell Get-Content.
N - number of lines.
From the begining of file:
Get-Content -Head N file.txt
From the end of file:
Get-Content -Tail N file.txt
答案 2 :(得分:2)
(@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
,所以这里只有cmd
行 - 但是我无法让你可靠地输入它。
它还会删除源代码行中的任何前导:
。
@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
将n
的第standardwaffle.txt
行提取到junk.txt
-
是可选的
但这涉及在您的计算机上安装批处理。这是否被你的&#34;没有安装&#34;要求,或者是&#34;安装&#34;仅适用于第三方实用程序?
答案 3 :(得分:1)
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
答案 4 :(得分:1)
为了获得正确的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,并且编码正确。
答案 5 :(得分:0)
你可以用这个:
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 "*****"
答案 6 :(得分:0)
如果您想使用简单的Windows命令,可以使用它,但是对于大文件来说会有点慢;-)(我在下面添加了第二种解决方案,效果更好:-),它提取了最近的100条记录任何长度的文件)
find /n " " <test.txt >test.tmp
for /l %%i in (1,1,100) do find "[%%i]" <test.tmp >test.tmp2
for /f "delims=] tokens=2" %%i in (test.tmp2) do echo %%i >>test.new
del test.tmp
del test.tmp2
move /y test.new test.txt
find /v /n "" <test.txt >test.tmp
for /f "delims=: tokens=2 %%i in ('find /v /c "" test.txt') do set /a NR=%%i
set /a NS=%NR%-100
for /l %%i in (%NS%, 1, %NR%) do find "[%%i]" <test.tmp >>test.tmp2
for /f %%i "delims=] tokens=2 %%i in (test.tmp2) do echo %%i >>test.new
move /y test.new test.txt
答案 7 :(得分:0)
一个单行示例,用于从file.txt中提取前9行并将其写入nine.txt
for /f "tokens=* delims=[" %i in ('type "file.txt" ^| find /v /n "" ^| findstr /b /r \[[1-9]\]') do set a=%i& set a=!a:*]=]!& echo:!a:~1!>> nine.txt
保留空白行,以分号开头的行,前导空格,并保留定界符和空白。
在Win 10 x64 CMD上测试