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%%
甚至不是我系统下列出的变量。
来自 windows batch-file 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 wmic 要求路径使用双反斜杠,因此您需要执行子字符串替换,%SystemRoot:\=\%
。同样重要的是要注意,有许多进程往往不携带 ExecutablePath
值,因此明智的做法是先将它们过滤掉。最后,你需要的命令是Terminate
,不是Delete
。
综上所述,我建议您使用:
@"%__AppDir__%wbem\WMIC.exe" Process Where "ExecutablePath Is Not Null And Not ExecutablePath Like '%SystemRoot:\=\%\%%'" Call Terminate
WMIC 似乎有自己的 Windows 文件夹变量,并且完全忽略了我的系统列出的变量(使用 set
)。我 运行 的命令是 wmic process where "not executablepath like '%%systemroot%%'" delete
以从 Windows 文件夹以外的任何地方终止所有进程 运行。如果我使用 %%systemroot%%
或相同的 %%windir%%
,程序会提前运行并终止其权限范围内的每个 运行 进程,无论位置如何。出于某种原因,正如我在网上阅读的那样,WMIC 处理变量 %%windows%%
并将正确执行它,但 %%windows%%
甚至不是我系统下列出的变量。
来自 windows batch-file 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 wmic 要求路径使用双反斜杠,因此您需要执行子字符串替换,%SystemRoot:\=\%
。同样重要的是要注意,有许多进程往往不携带 ExecutablePath
值,因此明智的做法是先将它们过滤掉。最后,你需要的命令是Terminate
,不是Delete
。
综上所述,我建议您使用:
@"%__AppDir__%wbem\WMIC.exe" Process Where "ExecutablePath Is Not Null And Not ExecutablePath Like '%SystemRoot:\=\%\%%'" Call Terminate