android - Windows Batch - 通过变量传递空间以在 ADB 命令中使用

标签 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.

如有任何帮助,我们将不胜感激。

最佳答案

替换:

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

与:

if not defined ARGUMENTS (
    GOTO EOF
)

您正在将 %* 分配给 ARGUMENTS

%* 可以有双引号参数,所以当你使用双引号时 包围 %ARGUMENTS%,那么引号对现在是 不同。

例如,如果您在 %ARGUMENTS% 中有一个值 "a b" 然后添加引号,您将得到 ""a b"",它被解释为 ""ab""

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

关于android - Windows Batch - 通过变量传递空间以在 ADB 命令中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52429194/

相关文章:

python - 使用pyinstaller创建可执行文件时python的plyer库问题

c# - 无法在 Windows 7 上读取 64 位注册表项

java - 聚类标记 OpenStreetMap java

android - 错误 : Please fix the version conflict either by updating the version of the google-services plugin

java - 应用程序发布时的 Proguard 错误 - android/arch/core/internal/SafeIterableMap

android滑动删除列表行

windows - 将文件复制到所有用户的启动文件夹

windows - FINDSTR拒绝匹配EOL

batch-file - 使用批处理文件将文件复制到 photoshop 目录中

batch-file - 只允许一个 Chromium 应用程序实例