2016-09-23 2 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 читает источник для резервного копирования в качестве пути профиля текущего пользователя так, т.е. Source: C: \ Users \ Administrator вместо требуемый 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 \ Параметр неверен. Это когда Im копирует первый диск (C: \), но он копирует D: \ fine .. Любые идеи? – Farhan

+0

Понял, что я исправил его, когда он работал как администратор. Как я могу это сделать, чтобы он мог делать то же самое без прав администратора? – Farhan

Смежные вопросы