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

如何修改备份批处理脚本,自动选择除备份盘外的可用分区?

解决方案

这问题挺实用的——要自动适配不同电脑的分区结构,同时排除脚本所在的外接硬盘,咱们可以用WMIC命令动态获取本地分区列表,替换掉原来硬编码的C:\ D:\就行。

修改后的循环代码

直接把原来的for %%d in (C:\ D:\) do (替换成下面这段:

for /f "skip=1 tokens=1 delims=" %%d in ('wmic logicaldisk where "DriveType=3" get caption') do (
    if /i not "%%d"=="%~d0" (
        if exist %%d (
            robocopy %%d %BackUpDir% *.jpg *.jpeg *.dng *.nef *.mp4 *.mov *.wmv *.avi *.3gp *.3g2 /MIN:20000 /MAX:2703622144 /s /W:15 /XD C:\$WINDOWS.~BT "C:\System Volume Information" C:\Windows "C:\Program Files" C:\Boot C:\MSOCache C:\Recovery "C:\Program Files (x86)" "C:\Documents and Settings" C:\ProgramData "C:\Users\All Users" C:\Users\Default "C:\Users\Default User" C:\Users\defaultuser0 C:\Users\Public
        )
    )
)

关键逻辑解释

  • wmic logicaldisk where "DriveType=3" get caption:通过WMIC筛选出所有本地固定硬盘分区(DriveType=3对应本地磁盘,会自动排除U盘、光驱、网络驱动器这类非本地存储),并获取它们的完整盘符(比如C:\、E:\)。
  • skip=1:跳过WMIC输出的第一行表头(也就是Caption那一行),避免把表头误当成分区处理。
  • tokens=1 delims=:解决WMIC输出自带多余空格的问题,确保完整读取每个盘符,不会出现截断。
  • if /i not "%%d"=="%~d0":排除脚本所在的外接硬盘盘符(%~d0就是脚本运行时所在的驱动器号,比如F:\),/i参数让比较不区分大小写,避免盘符大小写不一致导致判断出错。

完整修改后的脚本

SET BackUpDir=%~d0\BackUpDir
for /f "skip=1 tokens=1 delims=" %%d in ('wmic logicaldisk where "DriveType=3" get caption') do (
    if /i not "%%d"=="%~d0" (
        if exist %%d (
            robocopy %%d %BackUpDir% *.jpg *.jpeg *.dng *.nef *.mp4 *.mov *.wmv *.avi *.3gp *.3g2 /MIN:20000 /MAX:2703622144 /s /W:15 /XD C:\$WINDOWS.~BT "C:\System Volume Information" C:\Windows "C:\Program Files" C:\Boot C:\MSOCache C:\Recovery "C:\Program Files (x86)" "C:\Documents and Settings" C:\ProgramData "C:\Users\All Users" C:\Users\Default "C:\Users\Default User" C:\Users\defaultuser0 C:\Users\Public
        )
    )
)
exit 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:06:28