我目前正在使用批处理脚本将多个文件传输到使用 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""
,它被解释为
""
、a
、b
和 ""
。
当您尝试进行比较时,这会导致错误
if
和 ==
之间的多个值。
关于android - Windows Batch - 通过变量传递空间以在 ADB 命令中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52429194/