在Windows cmd中,默认的搜索路径顺序如下:
- 当前目录(.)
- 父目录(…)
- 系统环境变量PATH中定义的目录列表 (C:/windows/下的adb优先级高于path里 ???。adb版本又不一致导致的)
当在cmd中输入一个命令时,系统会按照上述顺序查找可执行文件。如果在某个目录中找到了可执行文件,就会停止搜索并执行该文件。
端口被占用
这个错误通常是因为ADB(Android Debug Bridge)无法在本地主机的5037端口上启动监听器,原因是该端口已被其他应用占用。错误代码10048是一个Windows系统的错误代码,表示地址已在使用中(即端口被占用)。
解决这个问题的方法有几种:
-
查找并关闭占用端口的程序:
使用命令行工具来查看哪个程序占用了5037端口。可以使用以下命令:netstat -aon | findstr 5037
这将列出所有使用5037端口的进程。记下输出中的PID(进程ID),然后使用任务管理器或
taskkill
命令来结束这些进程。例如,如果进程ID是1234,可以使用以下命令:taskkill /F /PID 1234
-
更改ADB的默认端口:
如果你不能或不想关闭占用端口的程序,可以尝试更改ADB的默认端口。首先,需要关闭当前运行的ADB服务器,然后在另一个端口上启动它。可以使用以下命令:adb kill-server adb -P 5038 start-server
这里将ADB的端口从默认的5037更改为5038。
-
检查防火墙和安全软件设置:
有时,防火墙或安全软件可能会阻止ADB正常工作。确保ADB的通信端口(默认是5037)在防火墙中被允许,或尝试暂时禁用防火墙和安全软件,看看问题是否解决。 -
重启计算机:
如果上述方法都不奏效,尝试重启计算机。有时,这可以解决端口冲突的问题。
如果问题仍然存在,可能需要进一步检查系统设置或考虑是否有其他软件冲突问题。
合并为一条命令
查找占用端口的进程 和 结束这个进程 for /f "tokens=5" %a in ('netstat -aon ^| findstr :5037') do taskkill /F /PID %a
在Windows命令提示符(cmd)中,您可以使用netstat
命令来查找哪个进程占用了特定的端口,然后使用taskkill
命令来结束该进程。但是,要将这两个操作合并为一条命令,您可以使用管道(|
)和findstr
命令来过滤输出,再配合for
循环来处理每个匹配项。
以下是一个示例命令,它将查找占用特定端口(例如,8080端口)的进程,并结束该进程。请注意,这需要在具有管理员权限的命令提示符下运行。
for /f "tokens=5" %a in ('netstat -aon ^| findstr :8080') do taskkill /F /PID %a
这条命令的工作原理如下:
netstat -aon
:列出所有连接和监听端口以及相应的进程ID。^| findstr :8080
:使用findstr
命令查找包含“:8080”的行。这里的^
是转义字符,用于在命令提示符中表示|
。for /f "tokens=5" %a in ('...') do ...
:对netstat
和findstr
命令的输出进行循环,每行的第5个元素(默认以空格为分隔符)是进程ID。taskkill /F /PID %a
:对每个找到的进程ID执行强制结束进程的操作。
请确保将8080
替换为您想要查询和结束进程的实际端口号。此外,如果您在批处理文件中使用此命令,需要将%a
替换为%%a
。