Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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
Windows 批处理-如何解析.txt文件并在其中查找单词_Windows_Parsing_Loops_Batch File_Text - Fatal编程技术网

Windows 批处理-如何解析.txt文件并在其中查找单词

Windows 批处理-如何解析.txt文件并在其中查找单词,windows,parsing,loops,batch-file,text,Windows,Parsing,Loops,Batch File,Text,我需要逐行浏览a.txt文件,从中提取并复制单词zzz和yyy,将它们存储在另一个b.txt文件中,然后循环浏览这些单词,并创建如下所示的命令行: blabla XXX 而XXX是从我们之前创建的b.txt文件中一个接一个地获取的,其中包含了zzz和yyy 例如: 文件a.txt jsdfjdsfnsdj yyy sdfdsfsd zzz b、 txt文件将是: yyy zzz 创建的命令将是: blabla yyy blabla zzz 将For/F用于读取行,并使用find

我需要逐行浏览a.txt文件,从中提取并复制单词zzz和yyy,将它们存储在另一个b.txt文件中,然后循环浏览这些单词,并创建如下所示的命令行:

blabla XXX
而XXX是从我们之前创建的b.txt文件中一个接一个地获取的,其中包含了zzz和yyy

例如:

文件a.txt

jsdfjdsfnsdj

yyy

sdfdsfsd

zzz
b、 txt文件将是:

yyy

zzz
创建的命令将是:

blabla yyy

blabla zzz
将For/F用于读取行,并使用findstr检查行

我认为你也可以让@Eric的方法起作用。如果将搜索表达式放在模式文件中,findstr会更好。我认为他的方法应该修改,以符合整个路线

echo ^^yyy^$>  patterns.txt
echo ^^zzz^$>> patterns.txt
for /F "delims=" %%a in (a.txt) do (call :checkline %%a)
del patterns.txt
goto :eof

:checkline 
@echo %1 | findstr /g:patterns.txt
if %ERRORLEVEL%==0 echo blablabla %1 >>c.txt
goto :eof
我想您可以使用这一行,而不需要额外的模式文件麻烦。不幸的是,findstr并不真正支持正则表达式中的交替,但我认为这是可行的

@echo %1 | findstr "^yyy$ ^zzz$"

第一部分可以使用find或findstr。一个简单的for/f循环应该可以处理其余的部分。如果它真的那么简单,您可以在第一个文件中使用for/f,然后跳过中间步骤。看起来匹配非常简单。我不熟悉批处理编码,你能给我整个脚本吗,因为它不起作用:\n即使我将txt方向更改为我公司的txt方向,我也不熟悉批处理编码,你能不能给我整个脚本,因为它不起作用:\即使我把txt的方向改成了我电脑里的方向,这个脚本能在一个有几行或只有一行的txt文件中找到模式吗?因为它不创建包含结果的c.txt文件,所以您有几个选项,并且您的需求不是完全透明的。/g选项允许在一个文件中进行多个搜索。参见findstr/?有关更多信息,我不知道为什么,但我找不到c.txt结果文件夹,我尝试将源文件a.txt和.bat文件放在同一目录中,并添加cd c:\。。。到批处理文件中的那个目录,但我只能看到创建的patterns.txt文件,而看不到结果文件c.txt。非常感谢你的帮助!你能确认findstr确实匹配结果吗?可能会在后面的行中添加echo%ERRORLEVEL%。我运行以下代码,但patterns.txt中没有显示任何内容,除了:^yyy$^zzz$我的代码是:cd C:\Users\isaacd\Documents echo^^yyy^$>patterns.txt echo^^zzz^$>>patterns.txt for/F delims=%a in a.txt do call:checkline%%a goto:eof:checkline@echo%1 | findstr/g:patterns.txt echo%ERRORLEVEL%>>patterns.txt如果%ERRORLEVEL%==0 echo blabla%1>>c.txt转到:eof
echo ^^yyy^$>  patterns.txt
echo ^^zzz^$>> patterns.txt
for /F "delims=" %%a in (a.txt) do (call :checkline %%a)
del patterns.txt
goto :eof

:checkline 
@echo %1 | findstr /g:patterns.txt
if %ERRORLEVEL%==0 echo blablabla %1 >>c.txt
goto :eof
@echo %1 | findstr "^yyy$ ^zzz$"