2016-09-23 43 views
0

我有这样的代码,ROBOCOPY批处理文件来获取所有本地磁盘和备份

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:\用户\管理员,而不是通缉C:\

而且,我怎么设置的变量只是字母与:\?这是在创建备份目标文件夹,这样我就可以通过驱动器字母排序他们...

+0

很难做出的任何建议,没有看到所有的代码。 – Squashman

回答

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 
) 
+0

感谢您的答案,不得不修改几个引号ehre和那里,但它的工作:)欣赏! – Farhan

+0

林想知道你是否可以帮助我。它有效的前一天,但现在,它给了我一个错误2016/09/26 09:23:19错误87(0x00000057)创建目标目录\\ dir \ dir \ dir \ C \ 该参数不正确。这是当我复制第一个驱动器(C:\)但它复制D:\罚款..任何想法? – Farhan

+0

意识到,当它作为管理员运行时,我得到了修复。我怎样才能做到这一点,所以它可以做同样的W/O管理员权限? – Farhan

相关问题