首页 > 解决方案 > Windows Batch - 通过变量传递空间以在 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.

任何帮助将不胜感激。

标签: androidwindowsbatch-fileadb

解决方案


代替:

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

和:

if not defined ARGUMENTS (
    GOTO EOF
)

您分配%*ARGUMENTS.

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

例如,如果您有"a b"in的值并%ARGUMENTS% 添加引号,则会得到""a b"",它被解释为 ""a和。b""

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


推荐阅读