WMIC 在选择性进程终止期间忽略 %SystemRoot%

WMIC ignores %SystemRoot% during selective process termination

WMIC 似乎有自己的 Windows 文件夹变量,并且完全忽略了我的系统列出的变量(使用 set)。我 运行 的命令是 wmic process where "not executablepath like '%%systemroot%%'" delete 以从 Windows 文件夹以外的任何地方终止所有进程 运行。如果我使用 %%systemroot%% 或相同的 %%windir%%,程序会提前运行并终止其权限范围内的每个 运行 进程,无论位置如何。出于某种原因,正如我在网上阅读的那样,WMIC 处理变量 %%windows%% 并将正确执行它,但 %%windows%% 甚至不是我系统下列出的变量。

来自 you need to double the % wildcard characters, but not those which enclose your variable name, so you want %SystemRoot% but you also want the wildcard, %%. As the value of %SystemRoot% is always a fully qualified path, you only need to add the wildcard after it. Additionally 要求路径使用双反斜杠,因此您需要执行子字符串替换,%SystemRoot:\=\%。同样重要的是要注意,有许多进程往往不携带 ExecutablePath 值,因此明智的做法是先将它们过滤掉。最后,你需要的命令是Terminate不是Delete

综上所述,我建议您使用:

@"%__AppDir__%wbem\WMIC.exe" Process Where "ExecutablePath Is Not Null And Not ExecutablePath Like '%SystemRoot:\=\%\%%'" Call Terminate