Windows 批处理-如何解析.txt文件并在其中查找单词
我需要逐行浏览a.txt文件,从中提取并复制单词zzz和yyy,将它们存储在另一个b.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
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$"