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



batch-file cmd (2)

我想检查我的Android设备上是否存在文件,如果不存在,则进行推送。 批量使用adb的语法是什么? 就像是:

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

Answer #1

我知道这有点旧,但是围绕以下内容如何处理:

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
)

我正在将其用于非常相似的场景,该场景适用于我。 以为我会分享。


Answer #2

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

命令处理器在语法上不是很宽容。 else 分支只能通过使用括号来实现。 真正的分支必须具有 ( if 与第二个比较字符串之间用空格隔开, if 它必须与命令位于同一行。

true分支的close可以与open位于同一行 ( 也可以位于另一行)。

关键字 else 必须在空格之后与true分支的close ) 在同一行上。

如果else分支也使用圆括号,则open ( 必须与 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. 第一行条件,第二行为true分支,第三行为不带括号的分支:

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

    if exist "directory\file" (
        echo exists
    ) else (
        adb push "file" "directory"
    )

可能有更多的变体,但它们都让人难以读懂。

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

如果也使用else分支,我建议始终使用第四个变体。

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

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

注意: 我不知道是否 if exist ./sdcard/file.any.\sdcard\file.any 都可以。 该问题不包含有关以下内容的任何信息

  • Android版
  • Android设备本身,
  • 如何配置设备以访问其存储介质上的文件和目录–作为可移动存储,使得可以从Windows命令行环境或仅通过Windows命令行不支持的 媒体传输协议 访问文件和目录环境,
  • 该批处理文件在哪个环境中运行,即当前目录是什么,环境变量 PATHPATHEXT 的值是什么,等等。

因此,答案仅涵盖 IF 语法错误,而不涉及如何检查具有任何Android版本且连接了任何设备驱动程序和数据存储访问协议的任何Android设备上是否存在文件。





adb