这是我的第一篇帖子,请求允许在这里寻求帮助。
我对批处理文件的了解有限。我有一个使用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:
"程序包名称中可能出现空格",然后FIND
和count
(/c)生成的not empty
(/v")行数,并将此计数与程序包名称一起显示。
(也适用于"安装在0台电脑上")