2016-09-23 2 views
0

J'ai ce code,fichier batch Robocopy pour obtenir tous les disques locaux et sauvegarde

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 
) 

Cependant robocopy lit la source de sauvegarde en tant que chemin de profil de l'utilisateur actuel afin par exemple Source: C: \ Users \ Administrateur au lieu de le désiré C: \

Aussi, comment puis-je définir les variables que les lettres et avec le: \? Ceci est pour la création des dossiers dans la destination de sauvegarde que je peux les trier par les alphabets d'entraînement ...

+0

Difficile de faire des recommandations sans voir tout votre code. – Squashman

Répondre

1

%%I reçoit le DeviceID des disques, ce qui est autre chose que la lettre de lecteur suivi par deux points, comme C:. Ceci constitue un chemin relatif. Pour en faire une référence absolue pointant vers le répertoire racine du lecteur, ajoutez simplement une barre oblique inverse, comme C:\. Donc dans votre code %%I devient %%I\.

Pour l'autre partie de la question, pour extraire la lettre pure commande seulement, vous avez besoin d'une variable intermédiaire pour le faire, comme drive, par exemple, vous pouvez appliquer sub-string expansion, comme %drive:~,1%. Mais puisque cela se passe dans un bloc de code, vous devez appliquer delayed expansion, comme !drive:~,1! (puisque vous utilisez déjà l'expansion retardée pour !dirs! et !files!, je suppose que vous avez déjà quelque part la ligne de commande setlocal EnableDelayedExpansion dans votre script):

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

Merci pour cette réponse, a dû modifier quelques guillemets ehre et là mais ça marche :) Appréciez ça! – Farhan

+0

Je me demande si vous pouvez m'aider. Cela a bien fonctionné l'autre jour mais maintenant, il me donne une erreur 2016/09/26 09:23:19 ERREUR 87 (0x00000057) Création du répertoire de destination \\ dir \ dir \ dir \ C \ Le paramètre est incorrect. C'est quand Im copiant le premier disque (C: \) mais il copie le D: \ fine .. Des idées? – Farhan

+0

Réalisé Je l'ai eu corrigé quand il fonctionnait en tant qu'administrateur. Comment puis-je faire en sorte qu'il puisse faire la même chose sans droits d'administrateur? – Farhan