Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何在Windows上创建批处理文件,以便根据子字符串和新行从文本文件中写出字符串?_Batch File_Grep_Findstr - Fatal编程技术网

Batch file 如何在Windows上创建批处理文件,以便根据子字符串和新行从文本文件中写出字符串?

Batch file 如何在Windows上创建批处理文件,以便根据子字符串和新行从文本文件中写出字符串?,batch-file,grep,findstr,Batch File,Grep,Findstr,伙计们 我不确定这是一项非常简单的任务还是一项非常复杂的任务,但不管怎样,我都在努力完成它。假设我有这样一个文本文件: 11111FOO 11111BAR 22222ZOOM 33333FOO 11111CAR FOO BAR CAR 我想在windows中找到一个命令行,我可以将它插入一个批处理文件,从这个文件中提取文本字符串并将它们推送到一个新文件中。我将传入要搜索的前导字符串,它将包含从该字符串末尾到下一新行的所有内容 使用上面的例子,如果我说前导字符串是11111,我会得到一个新的文

伙计们

我不确定这是一项非常简单的任务还是一项非常复杂的任务,但不管怎样,我都在努力完成它。假设我有这样一个文本文件:

11111FOO
11111BAR
22222ZOOM
33333FOO
11111CAR
FOO
BAR
CAR
我想在windows中找到一个命令行,我可以将它插入一个批处理文件,从这个文件中提取文本字符串并将它们推送到一个新文件中。我将传入要搜索的前导字符串,它将包含从该字符串末尾到下一新行的所有内容

使用上面的例子,如果我说前导字符串是11111,我会得到一个新的文本文件,如下所示:

11111FOO
11111BAR
22222ZOOM
33333FOO
11111CAR
FOO
BAR
CAR
其他一切都将被忽略


谢谢

如果输入文件中没有潜在的有毒字符,那么这可能就足够了:

@(对于/F“UseBackQ Delims=“%A In”(“input.txt”)Do@(设置“an=%A”)
对于(%%A 1%%A)中的/L%%B,执行@Call Echo%%A:%%B=%%)>“output.txt”

Magoo的补充内容:

@Echo关闭
(对于/F“UseBackQ Delims=“%A In”(“q46858215.txt”)Do(设置“an=%A”)
对于(%%A 1%%A)中的/L%%B,请调用Echo%%A:%%B=%%)>“Output1.txt”
如果“%~1”==”转到:下一步
(对于/F“Delims=“%%A In('FindStr/BLC:'%1”“q46858215.txt'))Do(
设置“an=%%A”
对于(%%A 1%%A)中的/L%%B,请调用Echo%%A:%%B=%%)>“Output2.txt”
:下一个
(对于/F“UseBackQ Delims=“%A In”(“q46858215.txt”)Do(设置“an=%A”)
对于(%%A 1%%A)中的/L%%B,执行Echo%%B))>“Output3.txt”
我使用了一个名为
q46858215.txt
的文件,其中包含OP的数据,用于测试

生成三个输出文件:

Output1.txt:Compo的原件
Output2.txt:过滤以隔离以开头的行(例程的第一个参数)

Output3.txt:Compo的原件,显示隔离的数字

如果输入文件中没有潜在的有毒字符,那么这可能就足够了:

@(对于/F“UseBackQ Delims=“%A In”(“input.txt”)Do@(设置“an=%A”)
对于(%%A 1%%A)中的/L%%B,执行@Call Echo%%A:%%B=%%)>“output.txt”

Magoo的补充内容:

@Echo关闭
(对于/F“UseBackQ Delims=“%A In”(“q46858215.txt”)Do(设置“an=%A”)
对于(%%A 1%%A)中的/L%%B,请调用Echo%%A:%%B=%%)>“Output1.txt”
如果“%~1”==”转到:下一步
(对于/F“Delims=“%%A In('FindStr/BLC:'%1”“q46858215.txt'))Do(
设置“an=%%A”
对于(%%A 1%%A)中的/L%%B,请调用Echo%%A:%%B=%%)>“Output2.txt”
:下一个
(对于/F“UseBackQ Delims=“%A In”(“q46858215.txt”)Do(设置“an=%A”)
对于(%%A 1%%A)中的/L%%B,执行Echo%%B))>“Output3.txt”
我使用了一个名为
q46858215.txt
的文件,其中包含OP的数据,用于测试

生成三个输出文件:

Output1.txt:Compo的原件
Output2.txt:过滤以隔离以开头的行(例程的第一个参数)

Output3.txt:Compo的原始版本,显示独立的数字

这些总是数字吗?fromt处的数字是固定长度的吗?使用:
调用jrepl“^11111”“”/a/f“input.txt”/o“output.txt”
。这些总是数字吗?fromt处的数字是固定长度的吗?使用:
调用jrepl“^11111”“/a/f“input.txt”/o“output.txt”
。有趣的方法-一个通用的“删除前导数字字符串”片段。问题是它不能过滤OP要求的“11111”(有人修复了这个问题),而且它显然只限于9个实际数字。尽管如此,想法还是很好。我已经包含了明显的相反内容(提取前导数字字符串)对于完成-这有一个问题,它将为没有前导数字的行生成
0
。您的答案假设所需结果中没有数字。这不是一个好的假设。但是如果该假设有效,那么一个更快的健壮解决方案就像('findstr/r“^11111)中的
(对于/f“delims=0123456789”%%a一样简单[^0123456789]“input.txt”do echo%%A)>“output.txt”
有趣的方法-一个通用的“删除前导数字字符串”片段。问题是它不能过滤OP要求的“11111”(有人修复了这个问题),而且它显然只限于9个实际数字。尽管如此,想法还是不错的。我已经包含了明显的相反内容(提取前导数字字符串)以完成-问题是它将为没有前导数字的行生成
0
。您的答案假设所需结果中没有数字。这不是一个好的假设。但如果假设有效,则更快的稳健解决方案与
一样简单(对于/f“delims=0123456789“%%A在('findstr/r“^11111[^0123456789]”input.txt“)中执行echo%%A)>“output.txt”