Batch file 批处理文件,用于检查某个进程(ultrasurf)是否正在运行,然后执行关闭(如果存在)

Batch file 批处理文件,用于检查某个进程(ultrasurf)是否正在运行,然后执行关闭(如果存在),batch-file,Batch File,我从互联网上获得了一个批处理文件: @for /f "tokens=5 delims= " %%i in ('netstat -ano -p tcp ^| find "127.0.0.1"') do Taskkill /F /PID %%i 这会杀死Ultrasurf进程,但是,我想做的是让它检查同一进程,然后关闭(如果存在) 我尝试了以下方法: @for /f "tokens=5 delims= " %%i in ('netstat -ano -p tcp ^| find "127.0.0.

我从互联网上获得了一个批处理文件:

@for /f "tokens=5 delims= " %%i in ('netstat -ano -p tcp ^| find "127.0.0.1"') do Taskkill /F /PID %%i
这会杀死Ultrasurf进程,但是,我想做的是让它检查同一进程,然后关闭(如果存在)

我尝试了以下方法:

@for /f "tokens=5 delims= " %%i in ('netstat -ano -p tcp ^| find "127.0.0.1"') do shutdown /s

无论进程是否正在运行,都会发出关闭命令。我需要它只在存在时执行。任何帮助都将不胜感激。

您的批处理文件不会杀死Ultrasurf,它会杀死本地主机上所有打开tcp端口的进程

如果运行资源监视器,您将看到许多服务都为RPC服务器打开了tcp端口。因此,修改后的脚本会立即关闭,因为for命令至少会找到1个匹配项

正在修改此问题的一个答案


警告:未经测试的代码

谢谢您的建议。这确实有效,但是,Ultrasurf的进程名称会随着每个版本(u1207.exe、u1210.exe等)的变化而变化。此外,任何足够聪明的人只要简单地重命名exe,也可以绕过此代码。如果进程名称保证有一些固定的前缀或后缀,您可以尝试使用该子字符串进行匹配。就重命名exe而言,恐怕你对此无能为力。防止重命名exe的措施如下:1>不授予用户管理权限。2> 设置限制性的组策略等。这两种策略都不能阻止意志坚定的用户,尤其是软件工程师:-|。
tasklist /FI "IMAGENAME eq ultrasurf.exe" 2>NUL | find /I /N "ultrasurf.exe">NUL
if "%ERRORLEVEL%"=="0" shutdown /s /f