windows批处理:如何从参数值中转义字符?

时间:2013-08-27 20:52:54

标签: string batch-file cmd escaping

尝试将长字符串传递给android模拟器。所以我必须在cmd解析然后以sh方式解析我的输入,因为那就是adb(我用来最终获取输入文本的工具) android模拟器)使用。

简单地说就是:CMD - > adb.exe - > sh - >远程登录

主要问题是adb.exe-> sh步骤。我必须逃避(之前添加\)几个字符。我现在回忆的是;(以及)

所以在上面的流程中,对于第一个(CMD)步骤,我有输入:abc 123 ();

但是对于第二步(adb.exe),我必须传入adb.exe ... "abc" 62 "123" 62 "\(\)\;"

在空间中打破我认为我可以用FIND(或者只是使用默认参数分离,因为我用来简化我到目前为止的样本),但替换地图(; - > \;),有没有简单的方法在.bat文件中执行此操作?

到目前为止,我所拥有的是:

@echo off
rem if there are no arguments, exit
IF [%1]==[] exit /B

:loop_args    
rem TODO: escape ';' and '(' and ')'

rem send this argument...
adb shell input text %1

rem ...plus a space
if [%2]==[] exit /B
adb shell input keyevent 62


rem shift to the next argument and continue
SHIFT
goto loop_args

2 个答案:

答案 0 :(得分:1)

这适用于多个角色。

set "var=%~1"
set "var=%var:;=\;%"
set "var=%var:)=\)%"
set "var=%var:(=\(%"

echo "%var%"

答案 1 :(得分:0)

如果应用程序以通常的方式处理文本,那么命令行文本周围的引号将如下所示:

batch.bat "ab de fg" "<123 && 456>" "(10 to one)"

使用此批处理文件

@echo off
:loop
adb shell input text "%~1"
shift
if not "%~1"=="" goto :loop