【问题标题】:robocopy batch file to get all local disks and backuprobocopy 批处理文件以获取所有本地磁盘和备份
【发布时间】:2017-01-31 17:57:01
【问题描述】:

我有这个代码,

For /F "tokens=1" %%I In ('wmic logicaldisk get DeviceID^,DriveType^|Findstr "3"') Do (
If Exist "%%I" robocopy %%I "%dest%\%%I"  /MIR /IS /XA:SH /XD "!dirs!" /XF "!files!" /R:3 /W:3 /TEE /log+:"%srclog%\%logfile%" /NP
)

但是 robocopy 将要备份的源读取为当前用户的配置文件路径,即源:C:\Users\Administrator 而不是想要的 C:\

另外,如何将变量设置为字母和 :\ ?这是用于在备份目标中创建文件夹,以便我可以按驱动器字母对它们进行排序...

【问题讨论】:

  • 很难在没有看到所有代码的情况下提出任何建议。

标签: batch-file robocopy


【解决方案1】:

%%I 接收磁盘的DeviceID,它只是驱动器号后跟一个冒号,如C:。这构成了相对路径。要使其绝对指向驱动器的根目录,只需附加一个反斜杠,如C:\。所以在你的代码中%%I 变成了%%I\

对于问题的另一部分,要仅提取纯驱动器号,您需要一个临时变量来执行此操作,例如drive,然后您可以应用sub-string expansion,例如%drive:~,1%但是因为这发生在代码块中,你需要申请delayed expansion,比如!drive:~,1!(因为你已经对!dirs!!files!使用延迟扩展,我假设你已经在脚本中的某处有命令行setlocal EnableDelayedExpansion):

for /F "tokens=1" %%I in ('wmic LogicalDisk GET DeviceID^,DriveType ^| findstr "3"') do (
    set "drive=%%I"
    if exist "%%I\" robocopy "%%I\" "%dest%\!drive:~,1!" /MIR /IS /XA:SH /XD "!dirs!" /XF "!files!" /R:3 /W:3 /TEE /log+:"%srclog%\%logfile%" /NP
)

【讨论】:

  • 感谢您的回答,不得不修改一些引号 ehre 和那里,但它正在工作:) 欣赏!
  • 我想知道你是否可以帮助我。前几天它运行良好,但现在,它给了我一个错误 2016/09/26 09:23:19 ERROR 87 (0x00000057) Creating Destination Directory \\dir\dir\dir\C\ 参数不正确。这是当我复制第一个驱动器 (C:) 但它复制 D:\ 很好.. 有什么想法吗?
  • 意识到当它以管理员身份运行时我得到了修复。我怎样才能使它可以在没有管理员权限的情况下执行相同的操作?
  • 好的,现在可以了,我什至什么都没做。我希望对此有一个解释,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多