Cmd 从脚本在子shell中执行命令

Cmd 从脚本在子shell中执行命令,cmd,Cmd,为了从设备中检索我的Android应用程序的数据库,我执行以下命令: prompt1> adb shell prompt2> run-as my.app.package prompt3> chmod -R 777 databases prompt3> exit prompt2> cat /data/data/my.app.package/databases/database.db > /sdcard/database.db prompt2> exit p

为了从设备中检索我的Android应用程序的数据库,我执行以下命令:

prompt1> adb shell
prompt2> run-as my.app.package
prompt3> chmod -R 777 databases
prompt3> exit
prompt2> cat /data/data/my.app.package/databases/database.db > /sdcard/database.db
prompt2> exit
prompt1> adb pull /sdcard/database.db
我想自动化这个过程,所以我用这些命令创建了一个脚本。问题是当我执行它时,
adb shell
被打开,并且下一个命令没有执行

请注意,
作为my.app.package运行
将打开另一个shell

编辑

当我执行脚本时:

prompt1> get_database.cmd
prompt2> _
它打开prompt2,但停止


如何操作?

您可以尝试使用引号将命令传递给shell:

adb shell "
adb run-as my.app.package 'chmod -R 777 databases; exit'
cat /data/data/my.app.package/databases/database.db > /sdcard/database.db
exit
"
adb pull /sdcard/database.db

最后,我用这种方式解决了这个问题:

@echo off
IF "%1" == "" goto USAGE
IF "%2" == "" goto USAGE

adb shell "run-as %1 chmod -R 777 /data/data/%1/databases; cat /data/data/%1/databases/%2 > /sdcard/%2"
adb pull /sdcard/%2
goto END

:USAGE
@echo Usage: %0  ^<package^> ^<file_name^>

:END
@echo关闭
如果“%1”==“转到使用
如果“%2”==“转到使用
adb shell“以%1 chmod-R 777/data/data/%1/数据库运行;cat/data/data/%1/数据库/%2>/SD卡/%2”
adb pull/sdcard/%2
转到终点
:用法
@回显用法:%0^^
:结束

实际上,
作为第三个shell运行
您的示例有些混乱。您是在类UNIX的shell(例如
sh
csh
等)中搜索解决方案还是在Windows的
CMD
中搜索解决方案?对不起,我的错。我需要一个CMD解决方案。然后我建议,你修改你的问题(例子)。第一个应用了大量UNIXish命令(cat、chmod等),可能会让人觉得您实际上在寻找sh。我已经在我的Windows机器上安装了它们。您可以添加一些详细信息吗?单引号
“…”
可以替换为外部文件
adb作为my.app.package
运行,并带有
chmod-R 777数据库;退出script.adb内部的