麻烦批处理

时间:2013-12-29 03:09:45

标签: batch-file command-line

我正在尝试搜索2个.txt文件,并将两个txt文件中找到的程序名称显示为新的txt文件。我正在搜索的2个文件位于同一文件夹中。

这是我的代码:

for /f "tokens=*" %%a in (Programs_installed.txt) do (
 for /f "tokens=*" %%b in (Bloatware1.txt) do (
  if %%a==%%b (echo %%a >> Bloatware_Found.txt)
 ) 
) 
Bloatware_Found.txt 

2 个答案:

答案 0 :(得分:0)

@echo off&cls
for /f "tokens=*" %%a in ('type "Programs_installed.txt"') do (
      for /f "tokens=*" %%b in ('type "Bloatware1.txt"') do if %%a==%%b echo %%a >>"Bloatware_Found.txt")

答案 1 :(得分:0)

没有样本数据(每个文件中有几行),很难说清楚。

可能有所帮助的一些事情:

if %%a==%%b应该是

if /i "%%a"=="%%b"
  • 引号确保将"data containing spaces"视为单个字符串。 /i使比较不区分大小写。

不确定最后一行(看起来是什么)实际上是打算做什么的。它应该调用默认编辑器的实例,加载bloatware_found.txt

OR

也许你打算

(
 for /f ... %%a
   for /f ... %%b
    if ....
)>bloatware_found.txt

which will create a new file containing anything `ECHO`ed from statements invoked by `(..)` - even if it's echoed from a subroutine.

如果你同时拥有>>file>samefile,我可能会发生这种情况。可能它会尝试使用>>file将数据附加到文件,然后将发送到控制台的整个输出(即没有,因为echo es被重定向)写入新版本同一个文件。如果是这样,请删除追加重定向(>>file)并恢复所有内容。

但是可能的解决方案,取决于可用(但未发布)的数据样本

findstr /l /g:bloatware1.txt /i Programs_installed.txt >bloatware_found.txt