无忧启动论坛

 找回密码
 注册
搜索

批处理命令怎样获取本地远程桌面端口号

查看数: 4259 | 评论数: 18 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-2-7 10:24

正文摘要:

为什么我这个命令不能运行 for /f "tokens=1 delims=:" %%a in ('netstat -tanbo|findstr "3389"') do set aa=%%a

回复

258_wmxn 发表于 2023-2-15 14:01:40
注水+2
258_wmxn 发表于 2023-2-15 12:50:51
学习+1
holley2008 发表于 2023-2-7 19:55:11
直接cmd运行,一个%就可以了
dos时代菜鸟 发表于 2023-2-7 16:09:13
是要中断特定端口对应的服务程序进程。
并不一定是 微软的远程桌面吧?


dos时代菜鸟 发表于 2023-2-7 15:11:40
本帖最后由 dos时代菜鸟 于 2023-2-7 15:12 编辑
窄口牛 发表于 2023-2-7 14:51
断开有两种,一种注销,一种单纯断开。

你这么一说。我倒是想起来,用  logman 和  logoff 应该也是可以的。
窄口牛 发表于 2023-2-7 14:51:59
断开有两种,一种注销,一种单纯断开。

点评

你这么一说。我倒是想起来,用 logoff 应该也是可以的。  详情 回复 发表于 2023-2-7 15:11
szwp 发表于 2023-2-7 14:46:45
dos时代菜鸟 发表于 2023-2-7 14:26
估计楼主的意思是 在服务端 关闭一下进程,起到与 客户端断开的目的。

原来不是要查端口号啊。
dos时代菜鸟 发表于 2023-2-7 14:26:47
szwp 发表于 2023-2-7 14:17
意思是端口被别的软件占用了,要干掉占用的未知软件么。

估计楼主的意思是 在服务端 关闭一下进程,起到与 客户端断开的目的。

点评

原来不是要查端口号啊。  详情 回复 发表于 2023-2-7 14:46
dos时代菜鸟 发表于 2023-2-7 14:18:23
本帖最后由 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

szwp 发表于 2023-2-7 14:17:56
baolizhu 发表于 2023-2-7 13:54
实际上我的远程桌面的端口号改过的,从另外一台电脑经常访问不到,我想做个批处理,根据我的端口号来结束相 ...

意思是端口被别的软件占用了,要干掉占用的未知软件么。

点评

估计楼主的意思是 在服务端 关闭一下进程,起到与 客户端断开的目的。  详情 回复 发表于 2023-2-7 14:26
dos时代菜鸟 发表于 2023-2-7 14:10:00
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
baolizhu 发表于 2023-2-7 13:54:36
实际上我的远程桌面的端口号改过的,从另外一台电脑经常访问不到,我想做个批处理,根据我的端口号来结束相应的进程。

点评

意思是端口被别的软件占用了,要干掉占用的未知软件么。  详情 回复 发表于 2023-2-7 14:17
baolizhu 发表于 2023-2-7 13:52:39
谢谢,我想取端口号为,设置为变量,再根据端口号来结束相应的进程。

点评

如果服务 开启着,进程终止了又会再开启。  详情 回复 发表于 2023-2-7 14:18
@echo off setlocal ENABLEDELAYEDEXPANSION set "name=TermService" set n= echo 名称 PID 端口 外部ip echo --------------------------------- for /f "tokens=1,2,3,4,5 delims= " %%c in (  详情 回复 发表于 2023-2-7 14:10
szwp 发表于 2023-2-7 13:17:27
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:33:29
本帖最后由 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


运行结果如下:





2013mqqdg 发表于 2023-2-7 11:41:22
我这有一个脚本,你看一下在你那里能否运行成功

@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
2013mqqdg 发表于 2023-2-7 11:40:20
仅从命令本身来看,命令行环境下直接for命令时,in前面的变理不能用双%形式,应该是单个%,括号里面的管道符号应该进行转义,在前面加上^,
2010techon 发表于 2023-2-7 10:41:21
本帖最后由 2010techon 于 2023-2-7 10:42 编辑

方法不对,最好直接查注册表
两个百分号是批处理里使用的,命令行下用一个

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-25 12:40

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表