无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4295|回复: 18
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2023-2-7 10:24:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
为什么我这个命令不能运行
for /f "tokens=1 delims=:" %%a in ('netstat -tanbo|findstr "3389"') do set aa=%%a
2#
发表于 2023-2-7 10:41:21 | 只看该作者
本帖最后由 2010techon 于 2023-2-7 10:42 编辑

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

使用道具 举报

3#
发表于 2023-2-7 11:40:20 | 只看该作者
仅从命令本身来看,命令行环境下直接for命令时,in前面的变理不能用双%形式,应该是单个%,括号里面的管道符号应该进行转义,在前面加上^,
回复

使用道具 举报

4#
发表于 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
回复

使用道具 举报

5#
发表于 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


运行结果如下:





回复

使用道具 举报

6#
发表于 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=%#
回复

使用道具 举报

7#
 楼主| 发表于 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
回复

使用道具 举报

8#
 楼主| 发表于 2023-2-7 13:54:36 来自手机 | 只看该作者
实际上我的远程桌面的端口号改过的,从另外一台电脑经常访问不到,我想做个批处理,根据我的端口号来结束相应的进程。

点评

意思是端口被别的软件占用了,要干掉占用的未知软件么。  详情 回复 发表于 2023-2-7 14:17
回复

使用道具 举报

9#
发表于 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
回复

使用道具 举报

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

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

点评

估计楼主的意思是 在服务端 关闭一下进程,起到与 客户端断开的目的。  详情 回复 发表于 2023-2-7 14:26
回复

使用道具 举报

11#
发表于 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

回复

使用道具 举报

12#
发表于 2023-2-7 14:26:47 | 只看该作者
szwp 发表于 2023-2-7 14:17
意思是端口被别的软件占用了,要干掉占用的未知软件么。

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

点评

原来不是要查端口号啊。  详情 回复 发表于 2023-2-7 14:46
回复

使用道具 举报

13#
发表于 2023-2-7 14:46:45 | 只看该作者
dos时代菜鸟 发表于 2023-2-7 14:26
估计楼主的意思是 在服务端 关闭一下进程,起到与 客户端断开的目的。

原来不是要查端口号啊。
回复

使用道具 举报

14#
发表于 2023-2-7 14:51:59 来自手机 | 只看该作者
断开有两种,一种注销,一种单纯断开。

点评

你这么一说。我倒是想起来,用 logoff 应该也是可以的。  详情 回复 发表于 2023-2-7 15:11
回复

使用道具 举报

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

你这么一说。我倒是想起来,用  logman 和  logoff 应该也是可以的。
回复

使用道具 举报

16#
发表于 2023-2-7 16:09:13 | 只看该作者
是要中断特定端口对应的服务程序进程。
并不一定是 微软的远程桌面吧?


回复

使用道具 举报

17#
发表于 2023-2-7 19:55:11 | 只看该作者
直接cmd运行,一个%就可以了
回复

使用道具 举报

18#
发表于 2023-2-15 12:50:51 | 只看该作者
学习+1
回复

使用道具 举报

19#
发表于 2023-2-15 14:01:40 | 只看该作者
注水+2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-1 18:25

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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