批处理文件以逐行解析文本文件,然后检查该行是否存在于其他文本文件中



这是我的第一篇帖子,请求允许在这里寻求帮助。

我对批处理文件的了解有限。我有一个使用FOR/f的脚本,它读取一个每行一个单词的文本文件,然后将该单词用作我的变量。

问题是,我想使用该变量(引用文件中的每一行)来检查该变量是否存在于所有目标文本文件中,现在我不知道如何为此创建批处理文件。我花了一些时间搜索答案,但找不到任何答案,如果StackOverflow中有类似的批处理文件,请给我链接。

目标:从参考文件packageList.txt中计算有多少台电脑有软件包。我已经收集了所有电脑上的软件包列表,并将其保存为PC1_bare.txt、PC2_bare.txt、PC3_bare.txt等…

示例:

我的文本文件是。。。

packageList.txt

Acrobat
Chrome
Flash
Photoshop
msOffice

PC1_bare.txt的内容:

Acrobat
Chrome
Flash
Photoshop
msOffice

PC2_bare.txt的内容:

Acrobat
Chrome
Flash
msOffice

PC3_bare.txt的内容:

Acrobat
Flash
msOffice

pcList的内容:

PC1_bare.txt
PC2_bare.txt
PC3_bare.txt

预期结果:

Acrobat is installed to 3 PC
Chrome is installed to 2 PC
Flash is installed to 3 PC 
Photoshop is installed to 1 PC
msOffice is installed to 3 PC

这应该可以完成任务-

for /f "delims=" %%a in (packageList.txt) do (
set count=0
for /f %%b in (pcList) do for /f %%c in (%%b) do if "%%c"=="%%a" set /a count+=1
echo %%a is installed to !count! PCs
)
@ECHO OFF
SETLOCAL
:: make a tempfile
:maketemp
SET "tempfile=%temp%%random%"
IF EXIST "%tempfile%*" (GOTO maketemp) ELSE (ECHO.>"%tempfile%a")
FOR /f "delims=" %%p IN (pclist.txt) DO (>>"%tempfile%a" TYPE "%%p")
FOR /f "delims=" %%p IN (packagelist.txt) DO (
FOR /f "delims=" %%c IN ('findstr /i /b /e /L /c:"%%p" "%tempfile%a"^|find /c /v ""') DO echo %%p is installed to %%c PC
)
DEL /Q "%tempfile%a"
GOTO :EOF

制作一个临时文件
将找到的文件列表连接到该文件中
对于每个程序包,将程序包名称查找为/L(文字),/b/e(开始和结束)都是一行,/i忽略大小写/c:"程序包名称中可能出现空格",然后FINDcount(/c)生成的not empty(/v")行数,并将此计数与程序包名称一起显示。

(也适用于"安装在0台电脑上")

最新更新