PowerShell中多ADB命令脚本&&报错,如何修改使其正常运行?
问题解决步骤
1. 修复PowerShell中&&的语法错误
PowerShell(尤其是5.1及更早版本)不支持&&作为命令分隔符,这是CMD专属语法。你需要将命令中的&&替换为PowerShell兼容的执行方式:
- 用分号
;直接分隔命令:adb shell am start -a android.intent.action.VIEW -d "whatsapp://send?phone=+123456789" ; Start-Sleep -Seconds 2 ; adb shell input text "Hello" ; adb shell input keyevent 66 - 或者分多行独立执行每个ADB命令,可读性更强:
adb shell am start -a android.intent.action.VIEW -d "whatsapp://send?phone=+123456789" Start-Sleep -Seconds 2 adb shell input text "Hello" adb shell input keyevent 66
2. 解决输入/按键事件未生效的问题
脚本仅打开应用但后续操作失效,核心原因是应用界面还未完全加载就执行了输入命令,需要在打开应用后添加延迟等待:
- 使用
Start-Sleep -Seconds <等待秒数>(建议2-3秒,可根据设备性能调整),确保WhatsApp的聊天输入框已就绪。 - 另外,
input text命令中的空格需要转义,可替换为%20,或用单引号包裹文本避免PowerShell解析空格:adb shell input text "Hello%20World" # 用%20代替空格 # 或者 adb shell input text 'Hello World' # 单引号避免PowerShell拆分文本
完整示例脚本(从CSV读取参数)
假设你的CSV文件包含Phone和Message两列,可参考以下脚本:
# 导入CSV参数 $whatsappTasks = Import-Csv -Path "whatsapp_params.csv" foreach ($task in $whatsappTasks) { # 打开指定联系人的WhatsApp聊天窗口 adb shell am start -a android.intent.action.VIEW -d "whatsapp://send?phone=$($task.Phone)" # 等待界面加载完成 Start-Sleep -Seconds 3 # 转义消息中的空格并输入 $formattedMessage = $task.Message -replace ' ', '%20' adb shell input text $formattedMessage # 发送消息(按键66对应回车键) adb shell input keyevent 66 # 可选:等待发送完成后再处理下一条 Start-Sleep -Seconds 1 }
额外注意事项
- 确保ADB已添加到系统环境变量,PowerShell能直接调用
adb命令。 - 部分设备需要开启USB调试中的“模拟输入”权限,否则
input命令会失效。 - 若使用PowerShell 7+,可通过
Set-PSReadLineOption -EditMode Emacs启用&&支持,但仍推荐用兼容旧版本的写法。
内容的提问来源于stack exchange,提问作者simonc
相关产品推荐
相关产品推荐

