
@shift
@echo off
 
color 0A
echo ___________________________________________________________
echo 设置默认的控制台前景和背景颜色(color)。                        
echo 指定控制台输出的颜色属性                                       
echo 颜色属性由两个十六进制数字指定 -- 第一个为背景，第二个则为     
echo 前景。每个数字可以为以下任何值之一:                            
echo    0 = 黑色        8 = 灰色                                                                       
echo    1 = 蓝色        9 = 淡蓝色                                  
echo    2 = 绿色        A = 淡绿色                                  
echo    3 = 湖蓝色      B = 淡浅绿色                                
echo    4 = 红色        C = 淡红色                                  
echo    5 = 紫色        D = 淡紫色                                  
echo    6 = 黄色        E = 淡黄色                                  
echo    7 = 白色        F = 亮白色                                                             
echo 例如: "COLOR fc" 在亮白色上产生亮红色                          
echo ____________________________________________________________
 
echo 本批处理文件需要配合adb、scrcpy 实现一些常用功能 
echo 运行目录尽量避免包含空格路径
echo  by --Tao
echo ____________________________________________________________
echo. 
  setlocal enabledelayedexpansion
  
:: 菜单
:menu    
 call:list_no_return
echo 		  .
echo 		操作列表
echo.
echo..		1.显示设备列表
echo..		2.usb设备转网络调试
echo..		3.连接网络设备
echo..		4.断开设备
echo..		5.投屏设备
echo..		6.日志监听
echo..		7.截屏
echo..		8.打开新窗口
echo..		9.原始cmd
echo..		10.卸载/安装软件
echo..		11.录屏
echo. 



::输入选择

set select=1
set /p select=请输入数字选择操作:
echo 你选择了: !select!
if !select! == 1 goto list
if !select! == 2 goto usb2net
if !select! == 3 goto connect
if !select! == 4 goto disconnect
if !select! == 5 goto scrcpy 
if !select! == 6 goto logcat
if !select! == 7 goto screen_shot
if !select! == 8 goto newWindows
if !select! == 9 goto new_cmd
if !select! == 10 goto UnOrInstall
if !select! == 11 goto recodeScreen
 goto menu
 
 ::录屏
 :recodeScreen
 @echo 此功能未开发
  
 goto menu
 
 :listUsrPackage
 
    echo 正在获取安装包列表...
	
	set /a count_p=0
	for /f "tokens=1" %%a in ('adb -s !device_ip! shell pm list packages -3') do (
		set /a count_p+=1
		set "package[!count_p!]=%%a"
		echo !count_p!. %%a
	)	 
goto:eof

:listAllPackage
 
    echo 正在获取安装包列表...
	
	set /a count_p=0
	for /f "tokens=1" %%a in ('adb -s !device_ip! shell pm list packages ') do (
		set /a count_p+=1
		set "package[!count_p!]=%%a"
		echo !count_p!. %%a
	)	 
goto:eof
 
 
 :: 卸载
 :uninstall
	set /p "input=请输入要卸载的程序编号: "
	if %input% gtr 0 (
		adb uninstall !package[%input%]:~8!
	) else (
		echo 输入的编号无效
		goto uninstall
	)
 
  goto:eof
  
  
 :: 卸载/安装软件
 :UnOrInstall

 @echo adb devices
 call:list_no_return
 call:select_devices
 @echo   .
 SETLOCAL
 set install=1
 set /p install= 请选择操作（1.安装 2.卸载 3.批量卸载） 默认安装软件:
 
 
 if !install!== 2 (
	echo 卸载
	call:listUsrPackage 
	call:uninstall

    echo.
  goto menu
  
 ) else (

	if !install!== 3 (
	 echo  此功能未开发
	 
	 ) else (
  
	   if !install!== 4 (
			echo 你进进入了未知领域
	   
	   ) else (
		echo 安装
							 
		 set /p packagePath=请输入安装路径:
								
		 if "!packagePath!"=="" (
		 echo 安装包路径不能为空 !packagePath!
		  ENDLOCAL
		  goto menu
		 ) else (
						 
			 echo 安装路径: !packagePath!
			 if "!device_ip!"=="" (
			 @echo 设备名称为空
			 @echo  adb install -r !packagePath!					
			 adb install -r !packagePath!					
			 ) else (
			@echo 设备名称不为空 !device_ip!
			 @echo adb -s !device_ip! install -r !packagePath!					
			adb -s !device_ip! install -r !packagePath!					
			)				
						 
		)
   
   )
 
 )
 
 
 )
 
 ENDLOCAL
 goto menu
  
  
::拉取文件
:pullFile
 ::echo 参1 %1 
 ::echo 参2 %2
 ::echo 参3 %3
 if  "!1" == "" (
  @echo adb pull %2 %3
 adb pull %2 %3
 
 )
  @echo adb -s %1  pull %2 %3
 adb -s %1  pull %2 %3
 goto:eof 
 

 
:: 截屏
:screen_shot
 call:list_no_return
 call:select_devices
 @echo   .
  set path= !cd!\img\
 md !path!
 
   call:time
		   if  "!device_ip!" == "" (
		   
		
		 echo  开始截图
		 
		 @echo   adb shell screencap -p /sdcard/!thisTime!.png 
		  adb shell screencap -p /sdcard/!thisTime!.png 
		 
		 echo 截图完成 主机位置:/sdcard/!thisTime!.png 
			
		  echo 传输图片  
		
		call:pullFile	"!device_ip!" /sdcard/!thisTime!.png   !path!!thisTime!.png

		 echo 传输完成 文件位置: !path!!thisTime!.png
	 
		 ) else (
			echo  开始截图
		 @echo 	 adb -s !device_ip! shell screencap -p /sdcard/!thisTime!.png 
			 adb -s !device_ip! shell screencap -p /sdcard/!thisTime!.png 
			 echo 设备 !device_ip! 截图完成 主机位置：/sdcard/!thisTime!.png 
			 echo 传输图片 ...  
			 call:pullFile	  "!device_ip!" /sdcard/!thisTime!.png   !path!!thisTime!.png
			  echo 传输完成   文件位置: !path!!thisTime!.png
			  )
   pause
	goto menu
 

:: 原始cmd
:new_cmd
 @echo 1:创建空窗口
 @echo 2:创建指定设备窗口
 @echo 3:创建指定设备窗口+shell
 
  set cm=1
 set /p cm=请选择类型
 
 if  !cm! == 1  (
 @echo start  "cmd" cmd  /k "adb devices -l"
 start  "cmd" cmd  /k "adb devices -l"
 )
 if  !cm! == 2 (
	call:list_no_return
	call:select_devices
	@echo start  "cmd" cmd  /k "adb -s %device_ip% "
	start  "cmd" cmd  /k "adb -s %device_ip% "
 )
 if  !cm! == 3 (
	call:list_no_return
	call:select_devices
	@echo start  "cmd" cmd  /k "adb -s %device_ip% shell"
	start  "cmd" cmd  /k "adb -s %device_ip% shell"
 )
 
 

goto menu

 


:: 新窗口打开
:newWindows
 @echo  start  adb操作.bat
 start  adb操作.bat
 goto menu

::显示设备列表并返回菜单
:list
 @echo adb devices
set count=0
for /f "tokens=1,2" %%a in ('adb devices -l') do (
    if "%%b"=="device" (
        set /a count+=1
        set devices[!count!]=%%a
        echo !count!. %%a
    )
)
if %count%==0 (
    echo 没有已连接的设备！
)
goto  menu

::显示设备列表不返回菜单
:list_no_return
 @echo   .
 @echo  正在列出已连接的设备...
 @echo  adb devices -l
set count=0
for /f "tokens=1,2" %%a in ('adb devices -l') do (
    if "%%b"=="device" (
        set /a count+=1
        set devices[!count!]=%%a
        echo !count!. %%a
    )
)
if %count%==0 (
    echo 没有已连接的设备！
)
 goto:eof
   
 :: usb转网络调试
 :usb2net
	 call:list_no_return
	@echo   .
  set /p name=请输入USB连接的设备名称：
      set  port=5555
	 echo 端口!port!
  
  if  "!name!" == "" (
echo 输入的设备名称为空，请确保只有一个设备连接（否则可能报错）
echo .
echo 请记住设备的ip信息：
 adb   shell ifconfig wlan0
  echo 端口!port!
  @echo  adb  tcpip  !port! 
  adb  tcpip  !port! 
   call:list
 
)
	 echo 请记住设备的ip信息：
   @echo  adb -s !name!   shell ifconfig wlan0
   adb -s !name!   shell ifconfig wlan0
    echo 开始转换

  @echo  adb -s !name! tcpip  !port! 
  adb -s !name! tcpip  !port! 
   call:list
 
  
:: 连接设备
 :connect
  set /p host= 请输入网络设备ip端口默认5555（例：192.168.0.2）：
  @echo adb connect !host!
  adb connect !host!
  goto  menu

:: 断开设备
 :disconnect
 call:list_no_return
 call:select_devices
 @echo   .
   if  "!device_ip!" == "" (
 @echo 输入的设备名称为空，将断开所有设备
 @echo  adb disconnect 
 adb disconnect 
  goto  menu
 )
  
  @echo adb disconnect !device_ip!
adb disconnect !device_ip!
	goto menu
	
:: 投屏设备
 :scrcpy
 call:list_no_return
 call:select_devices
 @echo   .
 
 if  "!device_ip!" == "" (
 echo 输入的设备名称为空，请确保只有一个设备连接（否则可能报错）
	 @echo start "scrcpy" cmd /c "scrcpy"
	start "scrcpy" cmd /c "scrcpy"
  goto menu
 )

	@echo start "scrcpy" cmd  /c "scrcpy -s  !device_ip!"
	start "scrcpy" cmd  /c "scrcpy -s  !device_ip!"
 goto menu
 
 :: 选择退出还是显示菜单
 :smenu

 set s=y
 set /p s= 是否返回菜单（y/n）默认进入菜单 ：
 if "!s!"=="n" goto end
  goto menu



 
::日志监听
:logcat


 echo       日志类型
 echo    1.日志输出到控制台
 echo    2.日志输出到文件
 echo    3.日志同时输出到控制台和文件
 set log=1
 set /p log=请选择类型
echo 日志类型 !log!

if !log! ==1 goto logcats
if !log! ==2 goto logcat2file
if !log! ==3 goto logcatAndFile


goto smenu

::输出日志到控制台
:logcats
 call:list_no_return
 call:select_devices
 @echo   .
 
echo 设备名称  "!device_ip!"
if  "!device_ip!" == "" (
echo 输入的设备名称为空，请确保只有一个设备连接（否则报错）
echo .
  @echo  start "logcat" cmd adb  logcat  
  start "logcat" cmd adb  logcat  
goto menu
)
 @echo 日志窗口已启动
 @echo "logcat" cmd /k "adb -s !device_ip! logcat"
 start "logcat" cmd /k "adb -s !device_ip! logcat"
goto menu

::日志输出到文件
:logcat2file
 call:list_no_return
 call:select_devices
 @echo   .
 


setlocal EnableDelayedExpansion
echo 当前路径1.1：!cd!
 
set thisTime= 123
call:time
 SETLOCAL
set path= !cd!\log\
set file=log_!thisTime!.txt 
 
set /p path= 请输入日志文件地址(当前路径 !path!!file!)

 @echo 创建文件夹 
  @echo md !path!
md !path!
!path! > !file!

echo 设备：!device_ip! 输出日志到 %path%%file%

if  "!device_ip!" == "" (
echo 输入的设备名称为空，请确保只有一个设备连接（否则报错）
echo . 
 @echo  start "logcat" cmd /k  adb logcat > %path%%file%
  start "logcat" cmd /k  adb logcat > %path%%file%
  @echo 日志输出窗口已启动
  ENDLOCAL
goto menu
)
  

 @echo start "logcat" cmd /k  adb -s !device_ip!  logcat > %path%%file%
 start "logcat" cmd /k  adb -s !device_ip!  logcat > %path%%file%
 @echo 日志输出窗口已启动
  ENDLOCAL
goto menu
 

::日志同时输出到控制台和文件
:logcatAndFile
 call:list_no_return
 call:select_devices
 @echo   .
 
set thisTime= 123
call:time
 SETLOCAL
set path= !cd!\log\
set file=log_!thisTime!.txt 
 
set /p path= 请输入日志文件地址(当前路径 %path%%file%)

md !path!
!path! > !file!
 
echo 设备：!device_ip! 输出日志到 %path%%file%

if  "!device_ip!" == "" (
echo 输入的设备名称为空，请确保只有一个设备连接（否则报错）
echo .
 start "logcat" cmd /k "adb logcat"
 
adb   logcat > %path%%file%
  ENDLOCAL
goto smenu
)

  @echo start "logcat" cmd /k "adb -s !device_ip! logcat"
  start "logcat" cmd /k "adb -s !device_ip! logcat"
 
 @echo adb -s !device_ip!  logcat > %path%%file%
 adb -s !device_ip!  logcat > %path%%file%
 
 
   ENDLOCAL
goto menu
 
 
 :: 结束函数
:end
@echo off
echo  结束
pause 
 
 
 
:: 获取日期
:time
 
@REM 提取年月日信息
echo !date:~0,10!
@REM 提取星期几信息
echo !date:~-3!
@REM 提取时间中的时和分
@REM echo !time:~0,5!
@REM 提取时和分和秒信息
  echo !time:~0,-3!
@REM 年
@REM echo !Date:~0,4!
@REM 月
@REM echo !Date:~5,2!
@REM 日
@REM echo !Date:~8,2!
@REM 时
@REM echo !Time:~0,2!
@REM 分
@REM echo !Time:~3,2!
@REM 秒
@REM echo !Time:~6,2!
 
set thisTime=!Date:~0,4!-!Date:~5,2!-!Date:~8,2!_!Time:~0,2!-!Time:~3,2!-!Time:~6,2!
set thisTime=%thisTime: =0%

goto:eof


:select_devices

if %count%==0 (
    echo 没有已连接的设备，请先连接设备或列出已连接的设备！
)

echo 请选择编号操作设备：
set /p device_num=
if not defined devices[%device_num%] (
    echo 无效的设备编号，请重新输入！
    goto select_devices
)

set device_ip=!devices[%device_num%]!
echo 已选择设备%device_num% - %device_ip%  

goto:eof
 
 
 
 
