如何使用批处理文件将文本文件的第一行写入新文本文件?

时间:2015-09-12 06:51:26

标签: batch-file line

好的,我在文本文件中有几行。我想得到第一行并将其保存在另一个文件中。例如,这是文本文件:

put returns between paragraphs
for linebreak add 2 spaces at end
for linebreak add 2 spaces at end2
for linebreak add 2 spaces at end3

我希望将put returns between paragraphs保存到另一个文件中。

我用过

for /f "tokens=" %%A in ('findstr /r "^[0-9][0-9]*$" <"C:\Users\Sherlock\Desktop\AbcImport\123.txt"') do echo 123>>1234.txt
pause

但它根本不起作用。

如何使用批处理文件获取写入新文本文件的文本文件的第一行?

4 个答案:

答案 0 :(得分:3)

选项1 - SET / P:这是最简单,最快速的纯批处理解决方案,前提是该行不超过1021个字节,并且它不会以必须保留的控制字符结束。文件的大小无关紧要 - 它将始终非常快速地读写第一行。

@echo off
setlocal enableDelayedExpansion
set "ln="
<"input.txt" set /p "ln="
>"output.txt" (echo(!ln!)

选项2 - FOR / F:这将适用于长达〜8191字节的行,但如果文件非常大,它可能会很慢,因为FOR / F循环必须读取整个文件在处理第一行之前。此解决方案与Mofi答案基本相同,只是它禁用了EOL选项,因此它永远不会忽略第一行,无论第一个字符是什么。它有一个限制,它将跳过空行,所以从技术上讲,如果第一行是空的,它不会给出正确的结果:

@echo off
for /f usebackq^ delims^=^ eol^= %%A in ("input.txt") do echo(%%A>"output.txt"&goto :break
:break

如果使用纯批次为空,有一种方法可以保留第一行,但我不会打扰。我会继续......

选项3 - JREPL.BAT,或其他一些非批处理解决方案:Batch在处理文本文件时非常差。使用其他脚本语言(如VBScript,JScript或Powershell)要好得多。或者是任意数量的unix实用程序的Windows端口。

我会使用JREPL.BAT - 一个混合的JScrpit /批处理正则表达式文本处理实用程序,可以在XP以后的任何Windows机器上本机运行。对于这样一个简单的任务来说,这样做有点过分,但它是一个非常方便,强大,高效的工具,可以用在你的武器库中。一旦拥有它,它就可以用于许多文本处理任务。完整的文档嵌入在脚本中。

jrepl "^.*" "$&" /jendln "quit=true" /f "input.txt" /o "output.txt"

如果将命令放在批处理脚本中,请使用CALL JREPL

答案 1 :(得分:1)

以下是将文本文件的第一个非空白/空行写入另一个文本文件的批处理代码。

@echo off
for /F "usebackq delims=" %%I in ("InputTextFile.txt") do (
    echo %%I>"OutputTextFile.txt"
    goto ContinueAfterLoop
)
:ContinueAfterLoop

InputTextFile.txt是当前目录中包含要复制的第一行的文件。

OutputTextFile.txt是在当前目录中创建的文件,输入文件中的第一行被复制到此输出文件中。

命令 GOTO 用于在处理完第一行后退出循环,并在循环下方继续批处理文件。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • for /?
  • goto /?

另请阅读Microsoft有关Using Command Redirection Operators

的文章

答案 2 :(得分:0)

您可以使用此命令:

SetLocal EnableDelayedExpansion
for /f "tokens=* delims=;" %%m in ("C:\Users\Sherlock\Desktop\AbcImport\123.txt") do (
    set /p FirstLine=<%%m
    echo !FirstLine!>>1234.txt
)

和多个文件:

SetLocal EnableDelayedExpansion
for %%a in ("*") do (
    for /f "tokens=* delims=;" %%m in ("%%a") do (
        set /p FirstLine=<%%m
        echo !FirstLine!>>1234.txt
    )
)

答案 3 :(得分:0)

rem Get the first line of a text file:
set /P "line=" < "C:\Users\Sherlock\Desktop\AbcImport\123.txt"
rem Write it into a new text file:
echo %line%> 1234.txt