这是在 Windows 7 上使用命令行和批处理文件。
我想检查我的程序列表,卸载大量垃圾程序并更新大量过时的程序。我使用 wmic 命令逐行获取包含每个程序的文本文档。我想从该列表中删除名称中带有“microsoft”、“windows”或“visual”的每个程序。我尝试使用查找字符串命令,以及 /v 选项,使其仅输出没有匹配的行。但是,运行我编写的程序时,在文件中找不到匹配项,因此基本上只是复制它。我还尝试了通配符,以防单词周围的其他字符弄乱了它或发生其他事情。
这是它正在查看的文件中其中一行的示例:(LASTNAME-LAPTOP,Microsoft Office Excel Viewer,12.0.6612.1000)
PATH 只是我的闪存驱动器文件夹路径的表示,在脚本中,它是包含两个 RTF 文件的文件夹的实际路径。它包含一个空格,所以我在源和输出两边加上了引号。
这是我的程序:
findstr /i /v ".microsoft. .windows. .visual." "E:\PATH\programs.rtf" > "E:\PATH\programs2.rtf"
答案1
运行我编写的程序,在文件中找不到匹配项
我使用 wmic 命令逐行获取包含每个程序的文本文档。
从西米克:
所有输出文件都是 Unicode 文本(使用类型)
这会让findstr
需要 ASCII 作为输入的人感到困惑,例如:
F:\test>findstr /i /v "microsoft windows visual" unicode.txt
■N a m e V e r s i o n
V A I O D a t a R e s t o r e T o o l 1 . 6 . 0 . 1 3 1 4 0
I n k s c a p e 0 . 9 1 0 . 9 1
M S X M L 4 . 0 S P 3 P a r s e r ( K B 2 7 5 8 6 9 4 ) 4 . 3 0 . 2 1 1 7 . 0
您可以使用以下示例命令序列来解决此问题:
wmic product get name,version > unicode.txt
type unicode.txt > programs.txt
findstr /i /v "microsoft windows visual" programs.txt > programs2.txt
或者:
wmic product get name,version > programs.txt
type programs.txt | findstr /i /v "microsoft windows visual" > programs2.txt
笔记:
- 使用纯文本文件(非 RTF)作为输入
findstr
。 type
用于从 Unicode 转换为 ASCII。- 命令
.
中不需要字符findstr
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 类型- 显示一个或多个文本文件的内容。
- 西米克- Windows 管理规范命令。