[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理使用adb输入特殊字符(英文双引号)的一些问题

关于批处理使用adb输入特殊字符英文双引号的一些问题:
之前写了个简单的win通过for 遍历adb devices序列号来使用adb -s 指定序列号 shell input text 输入内容 的简单脚本,可是遇到输入特殊字符因为双引号本身的特性而倒是if部分判断时直接退出。故先将单台输入部分代码拿了出来,下列代码使用了字符截取与合并的方式处理了关于adb输入英文字符的转译问题,但win这边我使用set将放转译符:^  截取合并后并未达成能如期使用:if ”%处理后变量%“==”指定值“ 不退出而是执行接下来的操作,希望能帮忙解决一下这个问题
代码如下:
  1. :1
  2. set /p "c=请输入: "
  3. set "v=%c:'=\'%"
  4. set "g=%v:"=\\\"%"
  5. set "f=%g:&=\&%"
  6. set "k=%f:"=^"%"
  7. if "%k%"=="'=\'" ( set "k="&goto 1)
  8. if "%k%"=="e" call :g
  9. adb shell "input text %k%"
  10. echo 你输入了%c%
  11. echo adb 输入了%k%
  12. pause
  13. goto 1
  14. :g
  15. timeout 2 >nul
  16. echo 2秒后退出!!!
复制代码
输入1个双引号的运行结果:
C:\Users\Desktop\>set /p "c=请输入: "
请输入: "

C:\Users\Desktop\>set "v=""

C:\Users\Desktop\>set "g=\\\""

C:\Users\Desktop\>set "f=\\\""

C:\Users\Desktop\>set "k=\\\^""
此时不应有 =\'" ( set "k="&goto 1)。
C:\Users\Desktop\>if "\\\^""=="'=\'" ( set "k="&goto 1)
C:\Users\Desktop\>

本帖最后由 77七 于 2023-3-9 00:01 编辑

一共是有两个问题?

1. 此时不应有 =\'" ( set "k="&goto 1)。报错
2.输入e 后 不退出

  1. :1
  2. set /p "c=请输入: "
  3. set "v=%c:'=\'%"
  4. set "g=%v:"=\\\"%"
  5. set "f=%g:&=\&%"
  6. set "k=%f:"=^"%"
  7. set _"%k%"=1
  8. if defined _"'=\'" (
  9.         set "k="
  10.         set "_"'=\'"="
  11.         goto 1
  12. )
  13. if defined _"e" call :g
  14. rem adb shell "input text %k%"
  15. echo 你输入了%c%
  16. echo adb 输入了%k%
  17. pause
  18. goto 1
  19. :g
  20. echo 2秒后退出!!!
  21. timeout 2 >nul
  22. exit
复制代码


试试这样能解决吗?
bat小白,请多指教!谢谢!

TOP

回复 2# 77七


    我偷了个懒解决了
代码如下:
@echo off
:1
echo 输入 【enter】刷新 【e】退出
set c=
set /p "c=请输入: "
set "v=%c:'=\'%"
set "g=%v:"=\\\。%"
set "f=%g:&=\&%"
@REM echo %v%
@REM echo %g%
@REM echo %f%
@REM set "k=%f:"=^"%"
if "%f%"=="'=\'" ( set "k="&goto 1)
if "%f%"=="e" goto :g
set "k=%f:。="%"
echo %k%
adb shell "input text %k%"
echo 你输入了%c%
echo adb 输入了%k%
pause
goto 1
:g
echo 2秒后退出!!!
timeout 2 >nul
exit


但是我有点看不懂你的11行的set

TOP

现回车,输入特殊字符,输入e退出基本上是没问题了

TOP


TOP

回复 3# dos-a




你不是要返回重复输入吗?定义为空,重置一下
也可能是我想错了
bat小白,请多指教!谢谢!

TOP

返回列表