Windows批处理-在ADB命令中使用在变量上传递空间

时间:2018-09-20 16:10:35

标签: android windows batch-file adb

我目前正在使用批处理脚本通过ADB将多个文件传输到多个android设备。

我目前正在努力获取忽略输出文件路径中空格的参数。

我当前正在调用一个包含以下代码的外部批处理文件“ adb + .bat ”:

@echo off
SET ARGUMENTS=%*

if "%ARGUMENTS%" == "" (
    GOTO EOF
)

SET "ARGUMENTS=%ARGUMENTS:""="%"

SETLOCAL ENABLEDELAYEDEXPANSION 
:: INSTALL ON ALL ATTACHED DEVICES ::
FOR /F "tokens=1,2 skip=1" %%A IN ('adb devices') DO (
    SET IS_DEV=%%B
    if "!IS_DEV!" == "device" (
        SET SERIAL=%%A
        echo "adb -s !SERIAL! %ARGUMENTS%"
        call adb -s !SERIAL! %ARGUMENTS%
    )
)
ENDLOCAL

:EOF

然后在主 .bat 中使用它来将参数传递给多个设备。

cmd.exe /c @for /f "delims=" %%l in ('dir /b ^"%~sdp0PDF\*.pdf^"') do adb+.bat push "%~sdp0PDF\%%l" "/sdcard/PDF/%%l"

文件名包含无法删除的空格。 这会导致以下错误:

Z:\Customer\Model\Build Deployment Software\Build BAT Files>adb+.bat push "Z:\CUSTOP~1\MODEL\BUILDD~1\BUILDB~1\PDF\Test PDF.pdf" "/sdcard/PDF/Test PDF.pdf"
PDF.pdf" "/sdcard/PDF/Test was unexpected at this time.

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

替换:

if "%ARGUMENTS%" == "" (
    GOTO EOF
)

使用:

if not defined ARGUMENTS (
    GOTO EOF
)

您正在将%*分配给ARGUMENTS

%*可以带双引号的参数,因此当您使用双引号时 包围%ARGUMENTS%,则引号对现在为 不同。

例如,如果您在"a b"中的值为%ARGUMENTS% 然后加上引号,得到""a b"",它被解释为  ""ab""

当您尝试进行比较时,这会导致错误 if==之间有多个值。

答案 1 :(得分:0)

我对这个问题采取了不同的方法。我没有在外部.bat中调用该脚本,而是直接在主.bat中使用了该脚本。

SETLOCAL ENABLEDELAYEDEXPANSION 
FOR /F "tokens=1,2 skip=1" %%a IN ('adb devices') DO (
    SET IS_DEV=%%b
    if "!IS_DEV!" == "device" (
        SET SERIAL=%%a
            call adb -s !SERIAL! push -p "%~sdp0PDF" "/sdcard/PDF"
    )
)
ENDLOCAL