当在FOR循环中运行“adb pull ”时,Windows cmd会加扰

我试图创build一个batch file,使用adb pull从我的Android手机中提取所有的摄像头video。

set source=/mnt/m_external_sd/Android/data/com.happyconz.blackbox/files/autoboy/autoboy_video set destination=S:\Archive\Autoboy\original for /f "usebackq" %%f in (`adb shell ls %source%`) do ( echo.adb pull %source%/%%f ) 

这个脚本可以工作 ,因为这会创build下面的输出(出于debugging目的回显):

adb pull /mnt/m_external_sd/Android/data/com.happyconz.blackbox/files/autoboy/autoboy_video/2017_08_28_08_33_53.mp4

adb pull /mnt/m_external_sd/Android/data/com.happyconz.blackbox/files/autoboy/autoboy_video/2017_08_28_18_35_14.mp4

[…]


但是,当我尝试将目标定义到adb pull命令时,它不起作用

 set source=/mnt/m_external_sd/Android/data/com.happyconz.blackbox/files/autoboy/autoboy_video set destination=S:\Archive\Autoboy\original for /f "usebackq" %%f in (`adb shell ls %source%`) do ( echo.adb pull %source%/%%f %destination%\%%f ) 

这一个给出了以下输出:

S:\存档\ Autoboy \原有\ 2017_08_28_08_33_53.mp4nz.blackbox /文件/ autoboy / autoboy_video / 2017_08_28_08_33_53.mp4

S:\存档\ Autoboy \原有\ 2017_08_28_18_35_14.mp4nz.blackbox /文件/ autoboy / autoboy_video / 2017_08_28_18_35_14.mp4

[…]


如果我试图实际运行命令而不是回显,它给了我一个不同的扰码string:

'does not existmnt / m_external_sd / Android / data / com.happyconz.blackbox / files / autoboy / autoboy_video / 2017_08_28_08_33_53.mp4


在运行这个脚本之前,我需要在cmd中设置什么东西,还是这是一个真正的bug?

当然,我可以cd到我的目的地。 dir,然后运行pull而不给它的目的地,但这是一个简单的脚本不必要的复杂化。

我敢打赌,这是因为Windows和Unix使用不同的新行定义。

更改您的最终文件名只使用该文件的基础和扩展名,并报价封装它的安全性:

 echo.adb pull %source%/%%f "%destination%\%%~nxf" 

这可能会有所帮助。