我想要一个批处理文件,通过 adb 运行 select 语句并返回找到的行。 这是我在批处理文件中使用的命令:
adb shell "su -c sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db 'select * from sms;'"
我遇到的问题是,我的命令产生错误:
Error: incomplete input
我不明白的是休闲命令工作得很好:
adb shell "su -c sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db '.tables'"
这将按预期返回数据库中的表。
我的猜测是,我需要转义一些字符,“;”也许吧,但是用 \ 或 ^ 转义它都不起作用。
任何帮助将不胜感激。
我猜你正在使用powershell,然后逃脱
;
:
adb shell "su -c sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db 'select * from sms`;'"
正确的答案是使用
`"`"
来编码"
。
adb shell "su -c 'sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db `"`"SELECT * FROM sms;`"`"'"
我是通过 chatGPT 才知道的。
另一种方法是使用
`\`"
。这更有意义。你用adb端的"
转义\
,然后你在powershell端用反引号转义这两个字符。
adb shell "su -c 'sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db `\`"SELECT * FROM sms;`\`"'"
如果有人想失去理智,还可以在 select 语句中添加一个 where 子句:
adb shell "su -c 'sqlite3 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db `\`"SELECT body FROM sms WHERE address=`\`\`\`"+41798072042`\`\`\`";`\`"'"
工作起来很有魅力。