WMIC和FOR循环

时间:2016-05-20 14:08:28

标签: batch-file cmd wmic

所以这是我的代码

wmic product get name > "programs.txt" 
FOR /f %%a IN (programs.txt) DO (
    pause
    echo %%a
    set /p variable= Delete %%a?
    pause
    IF "%variable%" == "yes" (
        wmic product where name="%%a" call uninstall
        cls
    ) ELSE (
    cls
    )
)

我正在尝试创建一个程序,它将显示已安装的程序并询问是否要卸载它们。代码运行良好,直到for循环,但它只是退出。我用@echo尝试了它,它只是输出代码但没有运行它。任何帮助都会很棒

[编辑]只是为了解释一下,当我运行代码时,一切都运行良好,直到for循环然后它搞砸了。它甚至不会在for循环结束后暂停运行。

1 个答案:

答案 0 :(得分:1)

问题在于如何创建文本文件。 WMIC输出是Unicode。当For循环尝试读取它时,它会将其作为ANSI(默认)文件打开。这导致奇怪的行为。

而不是重定向输出,/output就像这样:

wmic /output:"uniprogs.txt" product get name 

然后你必须使用TYPE命令将它从Unicode转换为ANSI / ASCII:

TYPE uniprogs.txt > ansiprogs.txt

现在在ansiprogs.txt上运行你的for循环,一切都应该是好的。