好的,我在文本文件中有几行。我想得到第一行并将其保存在另一个文件中。例如,这是文本文件:
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
但它根本不起作用。
如何使用批处理文件获取写入新文本文件的文本文件的第一行?
答案 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