2016-09-23 67 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

相關問題