我有一个包含 n 行的文本文件。m 行包含我感兴趣的字符串 (m<=n)。我需要一个批处理文件,它只将包含字符串的单行(例如第一次出现)复制到新的文本文件中。当我使用 findstr 命令时,它将复制包含该字符串的所有行。
谢谢!保罗·萨菲尔
我有一个包含 n 行的文本文件。m 行包含我感兴趣的字符串 (m<=n)。我需要一个批处理文件,它只将包含字符串的单行(例如第一次出现)复制到新的文本文件中。当我使用 findstr 命令时,它将复制包含该字符串的所有行。
谢谢!保罗·萨菲尔
给定您的查找 m 行的 FINDSTR 命令(它可以根据需要简单或复杂)
findstr "search" "fileName.txt"
然后您可以使用 FOR /F 循环处理该命令的结果。您可以使用 GOTO 在第一条匹配行之后跳出循环。
for /f "delims=" %%A in ('findstr "search" "fileName.txt"') do (
echo %%A >>"outFile.txt"
goto :break
)
:break
FOR 命令是可用于批处理的更复杂的命令之一。有很多选择。您可以通过键入HELP FOR
或FOR /?
从命令提示符获取有关该命令的帮助。
"DELIMS=" 选项禁用将行解析为标记。如果没有该选项, FOR /F 会将每一行分成由空格或制表符分隔的标记。分隔符列表可以设置为其他字符,或者在您的情况下,设置为空。
我上面给出的代码将跳过以开头的行,;
因为 FOR /F 将跳过任何以 EOL 字符开头的行 -;
默认情况下。您可以将 EOL 字符更改为任何单个字符。但是,如果您不知道匹配行的开头可能是什么,那么您就不知道 EOL 使用什么字符。完全禁用所有令牌解析和 EOL 行跳过的语法很奇怪:
for /f delims^=^ eol^= %%A in (...) do ...