注水+2 |
学习+1 |
直接cmd运行,一个%就可以了 |
是要中断特定端口对应的服务程序进程。 并不一定是 微软的远程桌面吧? |
本帖最后由 dos时代菜鸟 于 2023-2-7 15:12 编辑 窄口牛 发表于 2023-2-7 14:51 你这么一说。我倒是想起来,用 logman 和 logoff 应该也是可以的。 |
dos时代菜鸟 发表于 2023-2-7 14:26 原来不是要查端口号啊。 |
szwp 发表于 2023-2-7 14:17 估计楼主的意思是 在服务端 关闭一下进程,起到与 客户端断开的目的。 |
本帖最后由 dos时代菜鸟 于 2023-2-7 14:40 编辑 baolizhu 发表于 2023-2-7 13:52 方法一: 如果服务 开启着,进程终止了又会再开启。用 tasklist + taskkill 最为适合。 @echo off setlocal ENABLEDELAYEDEXPANSION set "name=TermService" FOR /F "tokens=2,3" %%c in ('tasklist /svc') do ( if /i "%%d"=="!name!" set pid=%%c ) if DEFINED pid ( echo 找到一个 !name! 进程,pid=!pid! taskkill /F /pid !pid! ) else ( echo !name! 进程不存在.. ) pause 方法二:直接停止服务后在开启服务。 net stop TermService net start TermService |
baolizhu 发表于 2023-2-7 13:54 意思是端口被别的软件占用了,要干掉占用的未知软件么。 |
baolizhu 发表于 2023-2-7 13:52 @echo off setlocal ENABLEDELAYEDEXPANSION set "name=TermService" set n= echo 名称 PID 端口 外部ip echo --------------------------------- for /f "tokens=1,2,3,4,5 delims= " %%c in ('netstat -tanbo') do ( if not "%%d"=="" ( set "port=%%d" set "port=!port::=,! for %%x in (!port!) do set "port=[:%%x]" set "out_ip=%%e" set pid=%%g if "%%g"=="" set pid=%%f set pid=!pid: =! ) else ( if /i "%%c"=="!name!" ( set /a n+=1 echo %%c !pid! !port! !out_ip! ) set port= set out_ip= ) ) if !n! equ 0 echo !name! 进程未开启. pause |
for /f "tokens=3" %# in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v "PortNumber"') do set /a p=%# |
本帖最后由 dos时代菜鸟 于 2023-2-7 12:44 编辑 考虑到 端口可能变动,所以应该以 服务进程名 为查找关键字。而名称都是在相关信息行的下一行出现,所以必须提前做变量保存,过后将变量删除。 以下红色部分为 批处理内容: @echo off setlocal ENABLEDELAYEDEXPANSION set "name=TermService" set n= echo 名称 端口 外部ip echo --------------------------------- for /f "tokens=1,2,3,4,5 delims= " %%c in ('netstat -tanbo') do ( if not "%%d"=="" ( set "port=%%d" set "port=!port::=,! for %%x in (!port!) do set "port=[:%%x]" set "out_ip=%%e" ) else ( if /i "%%c"=="!name!" ( set /a n+=1 echo %%c !port! !out_ip! ) set port= set out_ip= ) ) if !n! equ 0 echo !name! 进程未开启. pause 运行结果如下: |
我这有一个脚本,你看一下在你那里能否运行成功 @echo off setlocal enabledelayedexpansion ::批处理可以使用set / a转换十六进制值。 ::Set /a var=0xe2 ::Echo %var% ::设置命令窗口的大小 mode con cols=33 lines=12 for /f "skip=2 tokens=3 delims= " %%i in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber') do ( echo; echo; echo 当前端口16进制数值是 : %%i echo; echo; set /a xxe=%%i ) echo 当前端口10进制数值是 : %xxe% echo; echo; echo 按任意键退出程序 pause>nul |
仅从命令本身来看,命令行环境下直接for命令时,in前面的变理不能用双%形式,应该是单个%,括号里面的管道符号应该进行转义,在前面加上^, |
本帖最后由 2010techon 于 2023-2-7 10:42 编辑 方法不对,最好直接查注册表 两个百分号是批处理里使用的,命令行下用一个 |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.