You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mavic 3无人机SD卡文件清理批处理脚本故障排查求助

问题描述

我写了一个批处理脚本,用来清理Mavic 3无人机microSD卡中的文件:

  • 无人机生成.mp4(全分辨率视频)和.lrf(低分辨率视频)文件
  • 拍摄的照片会生成.jpg和对应的.lrf文件

当前脚本可完成以下操作:

  1. 新建full文件夹并将所有.mp4移动进去
  2. 将剩余.lrf重命名为.mp4

但存在问题:移动.mp4后,无法删除与.jpg同名的.lrf文件。对应的命令在命令行(单百分号%I)能正常运行,但放到批处理脚本(双百分号%%I)里就失效了:

for /r d:\DCIM\100MEDIA\ %%I in (*.jpg) do del %%~nI.lrf 2>nul

示例文件结构

1.lrf
1.mp4
2.lrf
2.mp4
3.jpg
3.lrf
4.lrf
4.mp4

期望最终结果

full(存放全分辨率视频的文件夹)
├─1.mp4
├─2.mp4
└─4.mp4
3.jpg
4.mp4  # 原4.lrf重命名后的文件

完整批处理代码

@echo off
mkdir d:\DCIM\100MEDIA\full
for /r d:\DCIM\100MEDIA\ %%m in (*.mp4) do move "%%m" d:\DCIM\100MEDIA\full
for /r d:\DCIM\100MEDIA\ %%I in (*.jpg) do del %%~nI.lrf 2>nul
for /r d:\DCIM\100MEDIA\ %%l in (*.lrf) do ren "%%l" *.mp4
问题原因
  1. 缺少文件路径:for /r遍历到的.jpg文件若在子目录(即使当前示例没有),del %%~nI.lrf会默认在脚本执行的当前工作目录查找.lrf,而非.jpg所在的目录,导致找不到目标文件。
  2. 未加引号:如果文件名包含空格或特殊字符,del命令会解析错误,直接失效。
解决方案

修改删除.lrf的命令,补上.jpg所在的路径,并给文件名加引号:

for /r d:\DCIM\100MEDIA\ %%I in (*.jpg) do del "%%~dpI%%~nI.lrf" 2>nul

修正后的完整脚本

@echo off
set "target_dir=d:\DCIM\100MEDIA"
mkdir "%target_dir%\full" 2>nul  # 加2>nul避免文件夹已存在时的报错

:: 移动所有mp4到full文件夹
for /r "%target_dir%" %%m in (*.mp4) do move "%%m" "%target_dir%\full"

:: 删除与jpg同名的lrf文件
for /r "%target_dir%" %%I in (*.jpg) do del "%%~dpI%%~nI.lrf" 2>nul

:: 将剩余lrf重命名为mp4
for /r "%target_dir%" %%l in (*.lrf) do ren "%%l" "%%~nl.mp4"

关键修改说明

  • %%~dpI:提取.jpg文件的驱动器号+路径,确保del命令在正确目录下查找.lrf
  • 给所有路径和文件名加双引号:兼容带空格或特殊字符的文件名
  • 给mkdir加2>nul:避免文件夹已存在时弹出错误提示
  • 用set定义target_dir:方便后续修改路径,提升脚本可维护性

内容的提问来源于stack exchange,提问作者E Tarasewicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:46:08