无忧启动论坛

标题: 批处理命令怎样获取本地远程桌面端口号 [打印本页]

作者: baolizhu    时间: 2023-2-7 10:24
标题: 批处理命令怎样获取本地远程桌面端口号
为什么我这个命令不能运行
for /f "tokens=1 delims=:" %%a in ('netstat -tanbo|findstr "3389"') do set aa=%%a

作者: 2010techon    时间: 2023-2-7 10:41
本帖最后由 2010techon 于 2023-2-7 10:42 编辑

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

作者: 2013mqqdg    时间: 2023-2-7 11:40
仅从命令本身来看,命令行环境下直接for命令时,in前面的变理不能用双%形式,应该是单个%,括号里面的管道符号应该进行转义,在前面加上^,
作者: 2013mqqdg    时间: 2023-2-7 11:41
我这有一个脚本,你看一下在你那里能否运行成功

@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
作者: dos时代菜鸟    时间: 2023-2-7 12:33
本帖最后由 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


运行结果如下:






作者: szwp    时间: 2023-2-7 13:17
for /f "tokens=3" %# in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v "PortNumber"') do set /a p=%#
作者: baolizhu    时间: 2023-2-7 13:52
谢谢,我想取端口号为,设置为变量,再根据端口号来结束相应的进程。
作者: baolizhu    时间: 2023-2-7 13:54
实际上我的远程桌面的端口号改过的,从另外一台电脑经常访问不到,我想做个批处理,根据我的端口号来结束相应的进程。
作者: dos时代菜鸟    时间: 2023-2-7 14:10
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
作者: szwp    时间: 2023-2-7 14:17
baolizhu 发表于 2023-2-7 13:54
实际上我的远程桌面的端口号改过的,从另外一台电脑经常访问不到,我想做个批处理,根据我的端口号来结束相 ...

意思是端口被别的软件占用了,要干掉占用的未知软件么。
作者: dos时代菜鸟    时间: 2023-2-7 14:18
本帖最后由 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


作者: dos时代菜鸟    时间: 2023-2-7 14:26
szwp 发表于 2023-2-7 14:17
意思是端口被别的软件占用了,要干掉占用的未知软件么。

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

原来不是要查端口号啊。
作者: 窄口牛    时间: 2023-2-7 14:51
断开有两种,一种注销,一种单纯断开。
作者: dos时代菜鸟    时间: 2023-2-7 15:11
本帖最后由 dos时代菜鸟 于 2023-2-7 15:12 编辑
窄口牛 发表于 2023-2-7 14:51
断开有两种,一种注销,一种单纯断开。

你这么一说。我倒是想起来,用  logman 和  logoff 应该也是可以的。
作者: dos时代菜鸟    时间: 2023-2-7 16:09
是要中断特定端口对应的服务程序进程。
并不一定是 微软的远程桌面吧?



作者: holley2008    时间: 2023-2-7 19:55
直接cmd运行,一个%就可以了
作者: 258_wmxn    时间: 2023-2-15 12:50
学习+1
作者: 258_wmxn    时间: 2023-2-15 14:01
注水+2




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3