如何修改备份批处理脚本,自动选择除备份盘外的可用分区?
解决方案
这问题挺实用的——要自动适配不同电脑的分区结构,同时排除脚本所在的外接硬盘,咱们可以用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
相关产品推荐
相关产品推荐

