批处理脚本 - 如果存在./sdcard/file.any使用adb

时间:2015-11-30 08:35:35

标签: android batch-file cmd adb

我想检查我的Android设备上是否存在文件,如果不存在 - 要推送它。批量使用adb的语法是什么? 类似的东西:

if exist ./sdcard/file.any do echo "exists"
else adb push file.any ./sdcard/

2 个答案:

答案 0 :(得分:1)

在命令提示符窗口if /?help if中运行,输出内部命令if的帮助页面。

命令处理器对语法不是很宽容。只有使用括号才能进行else分支。真正的分支必须(必须与命令if在同一行,而第二个比较字符串用空格隔开。

true分支的结束)可以与打开(或不同的行位于同一行。

关键字else必须与空格后关闭真正分支的)位于同一行。

如果其他分支也使用了圆括号,则打开(必须与else位于同一行,并以关键字的空格分隔。

关键字do在这里完全错误,因为它是命令 FOR 的关键字。

一些工作变体。

  1. 一行中的所有内容尽可能少的空间(难以阅读):

    if exist "directory\file" (echo exists) else (adb push "file" "directory")
    
  2. 一行中的所有内容都有更多空格,以便于阅读:

    if exist "directory\file" ( echo exists ) else ( adb push "file" "directory" )
    
  3. 第一行的条件,第二行的真分支,否则第三行没有括号的分支:

    if exist "directory\file" (
        echo exists
    ) else adb push "file" "directory"
    
  4. 整个条件的每个部分都在不同的行上:

    if exist "directory\file" (
        echo exists
    ) else (
        adb push "file" "directory"
    )
    
  5. 可能有更多变种,但阅读起来都很糟糕。

    最好使用第二或第四种变体,因为这两种变体最适合阅读。

    如果使用了else分支,我建议总是使用第四种变体。

    .\可以省略文件名/目录名的开头。

    Windows上的目录分隔符是反斜杠字符。

    注意:我不知道if exist ./sdcard/file.any.\sdcard\file.any是否有效。该问题不包含任何有关

    的信息
    • Android版,
    • Android设备本身,
    • 如何配置设备以访问其存储媒体上的文件和目录 - 作为可移动存储,可以从Windows命令行环境或仅通过Media Transfer Protocol访问文件和目录从Windows命令行环境支持,
    • 此批处理文件在哪个环境中运行,即当前目录是什么,环境变量PATHPATHEXT的值是什么等。

    所以答案仅涵盖 IF 语法错误,而不是如何在任何Android设备上检查文件是否存在,任何Android版本与任何设备驱动程序连接,并且数据存储访问协议用于访问设备。

答案 1 :(得分:0)

我知道这有点老了但是如何围绕以下几点:

set cmd="adb shell ls | find /c "theFile" "
FOR /F %%K IN (' !cmd! ') DO SET TEST=%%K
if !TEST! GTR 0 (
    echo the file exists
) else (
    echo the file does not exist
)

我正在使用这个非常类似的场景,对我有用。以为我会分享。