使用PowerShell变量生成adb push命令失败问题排查
问题分析与解决办法
问题根源
- 你直接执行的那行脚本存在语法错误:把源路径和目标路径放在了同一个双引号字符串里,PowerShell会将整个字符串作为单个参数传给adb。但adb的语法要求
adb push <源路径> <目标路径>是两个独立参数,因此adb会把"C:\temp\Files\test.jpg /sdcard"当成完整的源文件路径,自然找不到对应文件,执行失败。 - Write-Host输出的命令能正常运行,是因为PowerShell输出时会去掉外层的双引号,复制粘贴后变成
adb push C:\temp\Files\test.jpg /sdcard,此时源和目标是两个独立参数,adb能正确识别。
正确写法(推荐)
把源路径和目标路径拆成两个独立参数,分别处理引号:
# 直接执行正确的adb命令 adb push "$($c.DirectoryName)\$($c.Name)" $targetPath # 输出命令的写法保持不变即可 Write-Host adb push "$($c.DirectoryName)\$($c.Name) $targetPath"
这样PowerShell会把带引号的源路径(处理空格等特殊字符)和目标路径作为两个参数传给adb,完全符合adb的调用要求。
备选写法(不推荐,存在安全风险)
如果一定要通过拼接字符串执行命令,可以用Invoke-Expression,但需转义引号:
$command = "adb push `"$($c.DirectoryName)\$($c.Name)`" $targetPath" Invoke-Expression $command Write-Host $command
这种方式会把拼接好的字符串当作命令执行,但如果CSV里的路径包含恶意代码,可能引发安全问题,因此优先选择第一种方法。
内容的提问来源于stack exchange,提问作者simonc
相关产品推荐
相关产品推荐

