搜索文本文件中一行中的字符串,并将其复制到另一个文本文件或新变量中

时间:2015-07-24 10:38:15

标签: batch-file search text-files

我遇到了批处理问题,我无法支持它。我搜索谷歌和Stack Overflow几个小时,现在我自己问这个问题,因为似乎没有人有这个问题,或者我根本无法找到它。我甚至在谷歌搜索了最后的结果页面(!)。

所以我编写了一个批处理文件,它自动从服务器中提取文件名,并将它们与文件路径一起放入文本文件中。现在我有一个看起来大致如下的文件:

q:\0003730310008520150610120508\1_PY98200_00084_00085_09_20150610_140447.antfzg
q:\000649A7B0008520150630085701\1_KP40610_00084_00085_09_20150630_105647.antfzg
q:\000649A7B0008520150630085701\1_KP40610_00084_00085_09_20150630_110508.antfzg
q:\00161083B0008520150429065335\1_J281516_00084_00085_09_20150429_085326.antfzg
q:\00161083B0008520150429122000\1_PV92717_00084_00085_09_20150429_141952.antfzg
q:\00161083B0008520150515065834\1_VY65621_00084_00085_09_20150515_085802.antfzg
q:\00161083B0008520150527075722\1_D894693_00084_00085_09_20150527_095704.antfzg
q:\00161083B0008520150602075809\1_L893216_00084_00085_09_20150602_095757.antfzg
q:\00161083B0008520150608082553\1_VT04798_00084_00085_09_20150608_102033.antfzg
q:\00161083B0008520150610080050\1_LF22563_00084_00085_09_20150610_100016.antfzg
q:\00161083B0008520150623132003\1_VN57593_00084_00085_09_20150623_151927.antfzg

现在,我想搜索第一个示例中的特定文章编号:PY982001_后面的部分)。如果在文件中找到了该文件,请将包含该字符串的整行复制到新变量或新文本文件中。如果数字存在多次,那么也应该复制所有行。

我尝试了不同的 for 循环,但我失败了,因为我不熟悉批量编码。

1 个答案:

答案 0 :(得分:0)

npocmaka发布的此任务的命令行是:

type "original_text_file.txt" | %SystemRoot%\System32\find.exe "PY98200" > "new_text_file.txt"

它如何运作?

type是命令处理器cmd.exe的内部命令,它将文本文件的内容输出到标准输出(标准输出),通常显示在控制台窗口中。< / p>

类型的输出为piped类型 stdout | stdin < / strong>(标准输入)标准Windows控制台应用程序查找

find是一个非常小的控制台应用程序,用于在文本文件的行中查找简单的非正则表达式字符串,默认情况下输出到 stdout 包含搜索字符串的所有行。用于在文件中查找字符串的功能更强大的控制台应用程序是findstr。但查找也具有此任务所需的功能。

查找的输出会被>重定向到当前目录中的文件new_text_file.txt

为什么不直接使用文本文件的名称调用查找

%SystemRoot%\System32\find.exe "PY98200" "original_text_file.txt" > "new_text_file.txt"

使用上面的命令行查找还会输出一个空行,并在包含搜索字符串的行之前输出一行包含文件名的行。如果搜索多个文件包含字符串的行,这很有用,在输出中,知道哪些行来自哪个文件很重要。

new_text_file.txt应仅包含包含PY98200的行,而不包含任何有关源的其他信息。因此,命令类型用于让查找通过 stdin 读取original_text_file.txt的内容,这样可以避免打印两个标题行找到每个文件的输出到文件new_text_file.txt

此任务的备用命令行是:

%SystemRoot%\System32\findstr.exe /C:PY98200 "original_text_file.txt" > "new_text_file.txt"

有关已使用命令和控制台应用程序的更多详细信息,请打开命令提示符窗口,执行以下命令并将每个命令输出的所有帮助页面读入控制台窗口。

  • type /?
  • find /?
  • findstr /?

Windows输出的所有标准命令/控制台应用程序都有助于使用参数/?运行它们,这对于某些命令比在线文档更准确。