我目前正在使用批处理脚本通过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.
任何帮助将不胜感激。
答案 0 :(得分:1)
替换:
if "%ARGUMENTS%" == "" (
GOTO EOF
)
使用:
if not defined ARGUMENTS (
GOTO EOF
)
您正在将%*
分配给ARGUMENTS
。
%*
可以带双引号的参数,因此当您使用双引号时
包围%ARGUMENTS%
,则引号对现在为
不同。
例如,如果您在"a b"
中的值为%ARGUMENTS%
然后加上引号,得到""a b""
,它被解释为
""
,a
,b
和""
。
当您尝试进行比较时,这会导致错误
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