adb shell input 空格
时间: 2023-09-08 19:10:31 浏览: 109
如果你在命令行中输入 "adb shell input" 后面加上一个空格,那么它就等待你输入下一个参数,例如:
```
adb shell input tap 500 500
```
这个命令将模拟用户在屏幕上点击坐标 (500, 500) 的动作。注意,这个命令的执行需要先连接上 Android 设备,并且需要在命令行中输入正确的 adb 路径。
相关问题
参考制作一个bat脚本。首先对设备1进行有时间单位的抓取日志并自动命名存储到电脑上,第二步对设备1进行一些adb shell input tap进行点击的操作,然后需要按某键确认进行下一步,也可以按某键取消并退出脚本、如果确认,那么进行第三步在设备2上进行一些adb shell input tap进行点击的操作。第三步完成后停止抓取日志并退出脚本 注意点:1.日志文件格式要是纯数字 2.日志要正确存储到文件里 3.结束后正确关闭脚本 4.adb shell input相关命令后续我要修改,所以仅用点击和滑动示范一下即可
<think>好的,用户需要优化现有的BAT脚本,创建一个新的脚本来处理设备1和设备2的ADB操作,包括日志捕获、用户确认和ADB shell input操作。我需要结合用户提供的引用内容,尤其是关于日志命名和时间戳的部分,以及确保脚本正确执行和关闭。
首先,用户的需求分四点:设备1的带时间戳日志存储,设备1执行点击操作,用户确认后设备2执行点击操作,最后停止日志并退出。需要逐个解决。
日志文件名要求纯数字,所以需要生成不含分隔符的时间戳。引用3和4中提到了使用日期和时间变量,但用户示例中的文件名有连字符,需要调整。可以组合日期和时间,去掉所有非数字字符,比如%date%和%time%处理成YYYYMMDDHHMMSS格式。
设备1和设备2的操作需要指定设备序列号,所以在ADB命令中要使用-s参数。用户可能需要先获取设备列表,但假设用户已连接设备1和设备2,并知道其序列号,所以脚本中需要用户输入或用参数指定。
执行ADB shell input操作需要知道坐标,这部分可能需要用户输入或预设,但用户问题中没有具体坐标,所以可能在脚本中设为变量或使用参数。
用户确认交互使用pause或者set /p来实现,比如使用choice命令或者set /p让用户输入Y/N。考虑到兼容性,可能用set /p更合适。
停止日志捕获可能需要查找ADB logcat进程并结束它,可以用taskkill命令。或者使用Ctrl+C,但在脚本中可能需要启动日志捕获在后台,然后结束时终止。但BAT脚本中可能需要在另一个窗口启动logcat,记录PID,最后终止。但这样比较复杂,另一种方法是让logcat输出到文件,并在脚本结束时停止。不过ADB logcat是一直运行的,所以可能需要用start命令启动,然后记录进程ID,最后终止。
根据引用3和4中的例子,日志捕获通常用adb logcat -v time > filename,所以可能需要启动这个命令在后台,并在结束时终止进程。在BAT中,可以使用start来启动另一个窗口,然后用taskkill结束。
另外,确保日志正确存储,路径可能需要创建目录,使用md命令,如引用3中的例子。
综合这些点,脚本的大致流程应该是:
1. 设置日志路径和文件名,使用纯数字时间戳。
2. 开始捕获设备1的日志,后台运行。
3. 在设备1执行ADB shell input点击。
4. 提示用户确认,继续设备2的操作。
5. 用户确认后,在设备2执行点击。
6. 停止日志捕获。
7. 正确退出。
需要处理的问题包括:如何生成纯数字文件名,如何指定设备,如何后台运行logcat并结束进程,以及用户交互。
关于文件名,可以使用%date%和%time%的组合,但需要处理空格和分隔符。例如,将日期部分替换为数字,时间部分去除冒号和空格。引用3中使用的方法可以调整,比如:
set "datetime=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
set "datetime=%datetime: =%"
set "datetime=%datetime::=%"
这样可以得到类似20231023153045的数字串。
对于设备指定,假设用户已连接两个设备,脚本中需要指定设备序列号,可能通过参数或设置变量。用户可能需要修改脚本中的设备ID,所以应在脚本中设为变量,比如:
set device1=ABCD1234
set device2=EFGH5678
执行ADB命令时加上-s %device1%或-s %device2%。
用户确认部分,使用set /p choice=是否继续...,然后判断输入是否为Y或y。
停止日志捕获,需要找到logcat进程并终止。可以用taskkill /F /IM adb.exe,但这样会终止所有ADB进程,可能不合适。或者,使用VBScript或PowerShell来启动logcat并获取PID,但BAT中可能较难。另一种方法是让logcat输出到文件,并在完成后结束,但ADB logcat会持续运行,除非被中断。所以可能需要用Ctrl+C,但在脚本中如何实现?或者使用timeout,但不确定。或者,使用start命令启动logcat,并记录PID,但BAT中获取PID较麻烦。可能需要使用wmic命令获取进程ID。
例如:
start /B adb -s %device1% logcat -v time > %logpath%\%datetime%.log
set PID=%errorlevel%
但实际中,start的/B参数可能不会返回PID。可能需要使用其他方法,如:
for /f "tokens=2 delims=," %%a in ('tasklist /fi "imagename eq adb.exe" /fo csv /nh') do set PID=%%a
但这可能不可靠。或者,使用wmic process get命令来查找。
可能更简单的方法是在脚本最后使用taskkill /im adb.exe /fi "windowtitle eq C:\WINDOWS\system32\cmd.exe - adb -s device1 logcat ...",但可能不可靠。
或许用户接受在脚本最后使用taskkill /im adb.exe /f,但这会终止所有ADB进程,可能影响其他操作。如果设备1的logcat是唯一运行的ADB命令,可能可以这样做。但存在风险。
或者,用户可能需要在另一个命令提示符中启动logcat,然后结束时关闭该窗口。例如,使用start "LogcatWindow" adb ...,然后结束时taskkill /fi "windowtitle eq LogcatWindow*"。但需要测试。
这部分可能需要进一步考虑。根据引用中的例子,他们直接运行adb logcat > file,而没有处理停止,所以可能用户希望脚本在结束时自动停止。或者,用户手动终止,但不符合需求。因此,可能需要找到一种方法在脚本中启动logcat,然后在结束时终止。
可能的解决方案是,使用PowerShell来启动后台作业,但用户要求BAT脚本。所以可能在BAT中使用:
start "LogcatCapture" adb -s %device1% logcat -v time > "%logpath%\%datetime%.log"
然后,在脚本结束时:
taskkill /FI "WINDOWTITLE eq LogcatCapture" /T /F
这样,通过窗口标题来终止进程。这可能有效,因为start命令的标题参数是"LogcatCapture",而taskkill可以根据这个标题终止进程。
关于ADB shell input操作,命令是adb -s device shell input tap x y,需要用户提供坐标,或者脚本中预设。
最后,确保所有步骤的错误处理,比如设备是否连接,操作是否成功。但用户可能不要求错误处理,只需基本功能。
综合这些,脚本的大致结构:
1. 设置设备ID变量。
2. 创建日志目录。
3. 生成纯数字时间戳文件名。
4. 启动logcat捕获到文件,后台运行。
5. 设备1执行点击。
6. 用户确认。
7. 设备2执行点击。
8. 停止logcat进程。
9. 退出。
现在,将这些步骤转化为BAT脚本,注意语法和命令的正确性。</think>根据需求编写的BAT脚本实现如下:
```bat
@echo off
setlocal enabledelayedexpansion
:: 设置设备序列号(需手动修改)
set device1=ABCD1234
set device2=EFGH5678
:: 生成纯数字时间戳(格式:YYYYMMDDHHMMSS)
set "ts=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
set "ts=!ts: =0!" & set "ts=!ts::=!"
:: 创建日志存储目录
set "logdir=%~dp0ADB_Logs"
if not exist "!logdir!" md "!logdir!"
:: 在设备1启动日志捕获(后台运行)
start "LogCapture" adb -s %device1% logcat -v time > "!logdir!\!ts!.log"
:: 在设备1执行点击操作(需修改坐标)
adb -s %device1% shell input tap 500 800
:: 用户确认交互
set /p confirm=是否在设备2执行操作?(Y/N):
if /i "!confirm!"=="Y" (
adb -s %device2% shell input tap 500 800
) else (
echo 已跳过设备2操作
)
:: 停止日志捕获进程
taskkill /FI "WINDOWTITLE eq LogCapture" /T /F >nul 2>&1
echo 操作已完成,日志保存在:!logdir!\!ts!.log
pause
```
### 核心功能说明
1. **时间戳生成**:通过字符串截取组合$\%date\%$和$\%time\%$变量,使用`set "ts=!ts::=!"`去除冒号,生成纯数字格式时间戳(如:20231023153045)[^3][^4]
2. **日志捕获**:
- 使用`start "LogCapture"`创建独立进程执行adb logcat
- 通过重定向符`>`将输出保存到指定路径
- 最终通过taskkill根据窗口标题终止进程[^1]
3. **设备操作隔离**:
- 使用`-s`参数指定设备序列号
- 通过条件判断实现用户确认交互
4. **路径处理**:
- `%~dp0`获取脚本所在目录
- 自动创建日志存储目录`ADB_Logs`
### 使用前需修改
1. 替换`device1`和`device2`为实际设备序列号(通过`adb devices`获取)
2. 修改`input tap`后的坐标参数(如500 800)
### 测试验证流程
1. 确保两台设备已开启USB调试
2. 双击运行脚本后:
```mermaid
graph TD
A[启动日志捕获] --> B[设备1点击操作]
B --> C{用户确认}
C -->|Y| D[设备2点击操作]
C -->|N| E[跳过操作]
D/E --> F[终止日志进程]
```
制作一个bat脚本。首先对设备1进行有时间单位的抓取日志并自动命名存储到电脑上,第二步对设备1进行一些adb shell input的操作,然后需要按某键确认进行下一步,也可以按某键取消并退出脚本、如果确认,那么进行第三步在设备2上进行一些adb shell input的操作。第三步完成后停止抓取日志并退出脚本
<think>好的,我现在要帮用户写一个BAT脚本,实现多个功能,包括日志抓取、执行ADB命令、用户确认交互等。首先,我需要仔细分析用户的需求,确保每个步骤都覆盖到。
用户的需求包括:
1. 使用时间戳命名对设备1进行日志抓取并存储到本地。
2. 对设备1执行ADB Shell Input命令。
3. 通过按键确认是否继续或退出脚本。
4. 如果确认,则在设备2上执行ADB Shell Input命令。
5. 完成后停止日志抓取并退出脚本。
首先,关于日志抓取,用户提到要使用时间戳命名。根据引用3中的例子,用户可能希望日志文件名包含日期和时间,比如用%date%和%time%变量来生成。需要注意的是,这些变量在不同地区可能会有不同的格式,可能需要处理空格和分隔符。比如,引用3中使用set "YYYYmmdd=%date:~,4%%date:~5,2%%date:~8,2%",这样可以避免空格问题。同样,时间部分可能需要替换冒号为其他字符,或者去除空格。比如,用户之前的例子中用了%time:~0,2%-%time:~3,2%-%time:~6,2%,但可能会遇到上午时间前面有空格的问题,所以需要处理空格,比如用set "hh=%time:~0,2%"然后替换空格为0。
接下来,ADB日志抓取的命令应该是adb logcat,并且输出到文件。根据引用3中的例子,用户可能希望将日志保存到特定目录,比如按日期创建子目录。所以需要先创建目录,再启动logcat输出到文件。同时,用户可能需要将日志抓取放在后台运行,以便脚本继续执行其他命令。可以使用start命令启动一个单独的窗口,或者使用后台任务,但BAT中处理后台任务可能比较复杂,可能需要使用start /b或者调用其他工具。不过,根据引用3中的例子,用户可能更倾向于直接运行adb logcat > 文件路径,但这样会阻塞脚本执行,直到logcat停止。所以可能需要启动另一个进程来运行logcat,并在脚本结束时终止它。但用户的需求是在完成后停止日志抓取,所以可能需要记录logcat的进程ID,然后在脚本结束时终止它。但BAT中获取进程ID比较困难,可能需要使用taskkill根据进程名来终止。例如,启动logcat时,使用start "logcat" adb logcat -v time > "%filename%",然后后续用taskkill /im adb.exe /f来终止,但这样可能会终止所有adb进程,可能有风险。或者,用户可能需要使用Ctrl+C来停止logcat,但BAT中自动处理可能较难。可能需要让用户手动停止,或者在脚本最后执行adb kill-server,但这可能影响其他ADB操作。这部分可能需要进一步考虑。
然后,执行ADB Shell Input命令。用户需要针对设备1和设备2执行不同的命令。因此,需要指定ADB的设备序列号,使用-s参数。例如,adb -s device1_serial shell input tap x y。但用户可能需要先获取设备列表,或者提前知道设备序列号。这里假设用户已经连接了设备1和设备2,并且脚本中需要指定设备序列号。或者,用户可能希望动态获取设备列表,但BAT中处理多个设备的情况比较复杂,可能需要先检查设备数量。但根据用户的需求,可能直接指定设备序列号更简单。
用户交互部分,需要暂停脚本,等待用户按键确认是否继续。可以使用choice命令,例如choice /c YN /m "是否继续?"。根据用户的选择,决定是否执行设备2的命令。如果用户按Y,继续;按N,退出。或者使用set /p input=请输入Y/N,然后判断%input%的值。但choice命令可能更直接,且不需要处理输入错误的情况。
接下来,停止日志抓取。这部分可能需要结束之前启动的logcat进程。如前所述,可能需要用taskkill来终止adb logcat进程。但需要注意,这样可能会终止所有adb进程,包括正在执行的其他命令。因此,更好的方法可能是在启动logcat时记录其进程ID,然后根据PID来终止。但在BAT中,获取进程ID比较困难。可能需要使用wmic命令来获取进程信息,例如:
wmic process where "name='adb.exe' and commandline like '%logcat%'" get processid
然后根据返回的PID来终止进程。但这种方法可能比较复杂,且依赖于wmic的输出格式。或者,可以启动logcat到一个文件,并在脚本最后执行adb kill-server,但这会终止所有ADB连接,可能不是用户想要的。
综合来看,可能用户希望脚本在最后停止日志抓取,因此需要在脚本中启动logcat,并在结束时停止。可能的解决方法是,启动logcat后,让其在后台运行,脚本继续执行其他命令,最后使用taskkill终止adb logcat进程。但需要确保只终止logcat相关的进程,而不是其他ADB命令。例如:
start "logcat" adb logcat -v time > "%filename%"
...执行其他命令...
taskkill /fi "windowtitle eq logcat" /im adb.exe
但windowtitle可能不一定有效,这需要测试。或者,使用start的标题参数,然后根据标题来终止进程。这可能需要进一步验证。
此外,用户可能需要处理多个设备的情况,因此需要在ADB命令中指定设备序列号,例如使用adb -s DEVICE_SERIAL1 logcat来仅捕获特定设备的日志。但需要确认设备是否已连接,并且序列号正确。
现在,整合以上思路,编写脚本的大致步骤:
1. 设置变量,获取时间戳,创建日志目录和文件名。
2. 启动logcat抓取日志到指定文件,记录进程ID(如果可能)。
3. 执行设备1的ADB Shell Input命令。
4. 提示用户确认是否继续。
5. 如果用户确认,执行设备2的ADB Shell Input命令。
6. 停止logcat进程。
7. 退出脚本。
具体实现中需要注意的问题:
- 时间戳的格式处理,确保文件名合法。
- 日志目录的创建,使用md命令,如果目录已存在则不报错。
- ADB设备序列号的指定,可能需要用户提前输入或作为参数传入。
- 用户交互部分,使用choice或set /p。
- 停止logcat的方法,可能需要强制终止adb进程,但需谨慎。
另外,引用1中提到在TTL脚本中生成带时间戳的日志文件,可能对用户的时间戳处理有参考价值,比如使用gettime命令,但在BAT中需要使用%date%和%time%变量。
引用3中的日志保存方法,用户使用了日期和时间的字符串处理,比如:
set yyyy=%date:~,4%
set mm=%date:~5,2%
set day=%date:~8,2%
set "YYYYmmdd=%yyyy%%mm%%day%"
set "YYYYmmdd=%YYYYmmdd: =%"
同样处理时间部分,替换空格和冒号。
现在,将这些步骤转化为BAT脚本:
首先,处理日期和时间:
set "YYYYmmdd=%date:~0,4%%date:~5,2%%date:~8,2%"
set "hhmiss=%time:~0,2%%time:~3,2%%time:~6,2%"
set "hhmiss=%hhmiss: =0%" 替换空格为0,比如当小时为个位数时,如 9:30会变成09
set "filename=log_%YYYYmmdd%_%hhmiss%.log"
然后创建目录:
md "logs" 2>nul
启动logcat到文件:
adb -s device1_serial logcat -v time > "logs\%filename%" &
这里使用&符号可能无法在BAT中后台运行,可能需要使用start:
start "logcat" adb -s device1_serial logcat -v time > "logs\%filename%"
接下来执行ADB命令:
adb -s device1_serial shell input keyevent KEYCODE_HOME
用户确认:
choice /c YN /m "是否继续执行设备2操作?(Y/N)"
if errorlevel 2 exit /b
if errorlevel 1 (
adb -s device2_serial shell input keyevent KEYCODE_HOME
)
最后停止logcat:
taskkill /fi "windowtitle eq logcat*" /im adb.exe
但不确定windowtitle是否匹配,可能需要调整。或者,使用taskkill /im adb.exe /f,但会终止所有adb进程,可能有风险。
或者,用户可能需要手动停止,但不符合自动化的需求。
另一个方法是使用adb logcat -c来清除日志,但不会停止进程。或者,使用Ctrl+C信号,但在BAT中无法直接发送。因此可能需要记录进程ID,但BAT中无法直接获取start启动的进程ID。
可能的问题:当使用start启动adb logcat后,脚本会继续执行,而logcat会在后台运行。当脚本执行完毕时,logcat可能还在运行,导致日志文件一直被写入,直到用户手动终止。因此,用户需要在脚本结束时停止logcat。但如何做到这一点呢?
可能的解决方案是,在脚本末尾使用taskkill来终止adb logcat进程。但由于adb logcat和其他adb命令(如shell input)都使用adb.exe,直接终止所有adb.exe可能影响其他操作。因此,更好的方法是仅终止logcat进程。
在Windows中,可以使用以下命令查找特定的adb进程:
wmic process where "name='adb.exe' and commandline like '%logcat%'" get processid
然后使用for /f循环获取PID并终止:
for /f "tokens=1 delims= " %%a in ('wmic process where "name='adb.exe' and commandline like '%logcat%'" get processid ^| findstr /r [0-9]') do set PID=%%a
if defined PID taskkill /pid %PID% /f
但需要确保这个命令能正确获取到logcat的进程ID。此外,用户可能需要管理员权限来执行taskkill。
综合以上,完整的脚本可能如下:
@echo off
setlocal enabledelayedexpansion
:: 设置设备序列号
set "device1=设备1序列号"
set "device2=设备2序列号"
:: 生成时间戳
set "YYYYmmdd=%date:~0,4%%date:~5,2%%date:~8,2%"
set "hh=%time:~0,2%"
set "mi=%time:~3,2%"
set "ss=%time:~6,2%"
set "hh=!hh: =0!" :: 处理小时前导空格
set "hhmiss=!hh!!mi!!ss!"
set "filename=log_%YYYYmmdd%_%hhmiss%.log"
:: 创建日志目录
md "logs" 2>nul
:: 启动日志抓取(设备1)
echo 正在启动日志抓取...
start "logcat" adb -s %device1% logcat -v time > "logs\%filename%"
:: 执行设备1操作
echo 正在设备1执行ADB命令...
adb -s %device1% shell input keyevent KEYCODE_HOME
:: 用户确认
:confirm
choice /c YN /m "是否继续在设备2执行操作?(Y/N)"
if errorlevel 2 (
echo 用户取消操作,停止日志抓取...
taskkill /fi "windowtitle eq logcat*" /im adb.exe /f >nul 2>&1
exit /b
)
if errorlevel 1 (
echo 正在设备2执行ADB命令...
adb -s %device2% shell input keyevent KEYCODE_HOME
)
:: 停止日志抓取
echo 操作完成,停止日志抓取...
taskkill /fi "windowtitle eq logcat*" /im adb.exe /f >nul 2>&1
endlocal
不过,这里有几个需要注意的地方:
1. 设备序列号需要用户替换成实际的,或者通过adb devices获取,但BAT中处理可能较复杂,所以用户可能需要手动设置。
2. 时间戳处理中,%date%和%time%的格式依赖于系统区域设置,可能需要调整字符串截取的位置。例如,在某些区域设置中,日期格式可能是dd/mm/yyyy,而不是yyyy-mm-dd。因此,可能需要更通用的方法,或者提示用户根据需要修改。
3. 停止logcat时,使用taskkill根据窗口标题,但start "logcat"中的标题可能被正确匹配。需要测试是否有效,否则可能需要其他方法。
4. 如果用户按N取消,需要停止logcat并退出。
5. 需要确保adb命令可用,并且设备已连接。
可能还需要在脚本开始时检查设备是否连接,使用adb devices,但会增加复杂度。用户可能需要基础脚本,因此可能不需要这些检查。
此外,用户的需求是“完成后停止日志抓取”,因此无论用户是否确认继续,都需要在脚本结束时停止logcat。因此,在脚本末尾的taskkill应该始终执行,无论用户选择Y还是N。但用户按N时,在exit之前需要先停止logcat。所以可能需要将停止logcat的代码放在exit之前。
或者,使用goto标签来统一处理停止logcat的部分。
例如:
@echo off
setlocal enabledelayedexpansion
:: 设置设备序列号
set "device1=设备1序列号"
set "device2=设备2序列号"
:: 生成时间戳
set "YYYYmmdd=%date:~0,4%%date:~5,2%%date:~8,2%"
set "hh=%time:~0,2%"
set "mi=%time:~3,2%"
set "ss=%time:~6,2%"
set "hh=!hh: =0!"
set "hhmiss=!hh!!mi!!ss!"
set "filename=log_%YYYYmmdd%_%hhmiss%.log"
:: 创建日志目录
md "logs" 2>nul
:: 启动日志抓取(设备1)
echo 正在启动日志抓取...
start "logcat_%device1%" adb -s %device1% logcat -v time > "logs\%filename%"
:: 执行设备1操作
echo 正在设备1执行ADB命令...
adb -s %device1% shell input keyevent KEYCODE_HOME
:: 用户确认
choice /c YN /m "是否继续在设备2执行操作?(Y/N)"
if errorlevel 2 goto :stop_logcat
if errorlevel 1 (
echo 正在设备2执行ADB命令...
adb -s %device2% shell input keyevent KEYCODE_HOME
)
:stop_logcat
echo 停止日志抓取...
taskkill /fi "windowtitle eq logcat_%device1%*" /im adb.exe /f >nul 2>&1
endlocal
exit /b
这里修改了start的窗口标题为"logcat_设备1序列号",以便taskkill可以更准确地匹配。不过,start命令的标题参数可能不能包含变量,所以可能需要固定部分,如"logcat_device1",然后根据设备序列号调整。或者,直接使用固定标题,如"logcat_session",然后taskkill根据该标题。
但无论如何,taskkill /fi "windowtitle eq logcat_device1*"可能更可靠。
此外,如果用户没有设备2,或者需要动态处理设备,可能需要更复杂的逻辑,但根据用户需求,设备1和设备2是固定的,所以直接指定序列号即可。
总结:脚本的大致流程如下:
- 设置设备序列号变量。
- 生成带时间戳的日志文件名。
- 创建日志目录。
- 启动adb logcat到后台,使用start命令并指定窗口标题。
- 执行设备1的ADB命令。
- 用户确认是否继续。
- 如果继续,执行设备2的ADB命令。
- 无论是否继续,最后停止logcat进程。</think>根据需求编写BAT脚本的实现步骤如下(设备序列号需要替换为实际值):
```batch
@echo off
setlocal enabledelayedexpansion
:: 1. 设置设备序列号
set "device1=设备1序列号"
set "device2=设备2序列号"
:: 2. 生成时间戳(兼容不同区域设置)
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value ^| find "="') do set "datetime=%%a"
set "timestamp=!datetime:~0,8!_!datetime:~8,6!"
set "logfile=logs\log_%timestamp%.log"
:: 3. 创建日志目录
md "logs" 2>nul
:: 4. 启动日志抓取(使用单独窗口)
start "ADB_LOG" adb -s %device1% logcat -v time > "%logfile%"
:: 5. 执行设备1操作
adb -s %device1% shell input keyevent KEYCODE_HOME
:: 6. 用户交互确认
:confirm
choice /c YN /m "执行设备2操作?(Y/N)"
if errorlevel 2 (
taskkill /fi "windowtitle eq ADB_LOG" /im adb.exe /f >nul 2>&1
exit /b
)
:: 7. 执行设备2操作
adb -s %device2% shell input keyevent KEYCODE_HOME
:: 8. 停止日志抓取
taskkill /fi "windowtitle eq ADB_LOG" /im adb.exe /f >nul 2>&1
endlocal
```
### 关键实现说明
1. **时间戳生成**:使用`wmic os get localdatetime`命令获取标准化时间戳,避免区域设置差异导致日期格式错误[^3]
2. **日志路径管理**:采用`logs\`子目录存储日志文件,使用WMIC生成的时间戳格式示例:`log_20231025_153456.log`
3. **进程控制**:通过`start "窗口标题"`启动独立进程,使用`taskkill /fi "windowtitle"`精准终止日志进程[^1]
4. **错误处理**:`2>nul`抑制目录已存在的错误提示,`>nul 2>&1`隐藏进程终止输出
### 功能增强建议
1. 添加设备连接状态检查:
```batch
adb devices | find "%device1%" >nul || (
echo 设备1未连接
exit /b 1
)
```
2. 添加日志压缩功能(需安装7-Zip):
```batch
powershell Compress-Archive -Path "%logfile%" -DestinationPath "%logfile%.zip"
```
阅读全文
相关推荐

















