web-dev-qa-db-fra.com

Utilisation de robocopy avec la source et la destination comme variables

Complètement nouveau dans les scripts, j'ai essayé de trouver une solution en cherchant sur le Web, mais je suis perplexe, alors demandez de l'aide s'il vous plaît!

J'essaie d'utiliser robocopy avec une variable comme source et destination, différente pour chacune, mais je ne peux tout simplement pas obtenir la bonne syntaxe.

Le code dur que je peux bien travailler est:

robocopy C:\Users\me\Documents\a C:\Users\me\Documents\b

Mais je ne peux pas le faire fonctionner avec des variables. Après avoir lu, j'ai essayé toutes les variations du bas avec "et% in/out, avec et sans Set, et aucune d'entre elles n'a fonctionné.

Set src="C:\Users\me\Documents\a"
Set dest="C:\Users\me\Documents\b"

robocopy %src% %dest%

J'espère que c'est une explication claire de ce que j'essaie de faire, sinon de demander des éclaircissements .. Merci d'avance pour toute aide.

7
lcllm7

J'ai trouvé que Robocopy est délicat au point d'être arbitraire en matière de syntaxe. J'ai trouvé un problème similaire au vôtre:
Ce code fonctionne:

Set Today=%DATE:~0,3%
Robocopy "G:\folder A" "U:\%Today%\folder A"  ^
/S /XJD /R:25 /W:4 /NP /copyall ^
/LOG:"U:\%Today%\FolderALog.txt"
IF ERRORLEVEL 8 goto Badend

Ce code (bien structuré) ne fonctionne pas

Set Today=%DATE:~0,3%
Set source="G:\folder A"
Set target="U:\%Today%\folder A" 
Set Logname="U:\%Today%\FolderALog.txt"
Echo Source is %Source%
Echo Target is %Target%
Echo logfile named %Logname%
Pause
Robocopy %source% %target%   ^  
/S /XJD /R:25 /W:4 /NP /copyall  ^
/LOG:%Logname%
Pause

Cependant, dans ce 2ème exemple, sortons la 1ère suite de la ligne de commande et cela fonctionne:

Set Today=%DATE:~0,3%
Set source="G:\folder A"
Set target="U:\%Today%\folder A"
Set Logname="U:\%Today%\FolderALog.txt"
Echo Source is %Source%
Echo Target is %Target%
Echo logfile named %Logname%
Pause
Robocopy %source% %target% /S /XJD /R:25 /W:4 /NP /copyall  ^
/LOG:%Logname%
Pause

J'utilise le caret (^) comme caractère de continuation dans les tâches de commandes par lots depuis le DOS, mais dans ce cas, l'analyseur tente de la concaténer avec la variable précédente et la tâche meurt car le système pense que j'essaie. nommer un dossier "U: \% Today%\folder A ^". Ainsi va-t-il - vous continuez à essayer des choses jusqu'à ce que quelque chose fonctionne . Techniques de dépannage: Faire des échos de variables nouvellement définies puis une pause vous permet de vérifier les fautes de frappe et les guillemets égarés. La pause à la fin vous laisse amplement le temps de lire le code d'erreur, le cas échéant. Une autre chose que j’ai rencontrée jadis consistait à insérer par inadvertance un caractère non imprimable à la place d’un espace dans un chemin entouré de guillemets . RoboCopy est très puissant et mérite bien d’être bricolé occasionnellement avec une syntaxe délicate. 

set "src=C:\Users\me\Documents\a"
set "dest=C:\Users\me\Documents\b"

robocopy "%src%" "%dest%" 

Rien de mal avec votre sintax. De cette façon, "plus robuste" ou plus standard ou plus habituel, ...

MAIS robocopy n’est pas une copie, pas une copie. Vous demandez à robocopy de copier de la source à la cible fichiers modifiés ou nouveaux . S'il n'y a aucun changement, robocopy ne copiera rien. Si vous avez essayé et que cela fonctionne, .... si aucun changement, aucune copie de fichier.

ET vous n’avez pas demandé à Robocopy de copier des sous-répertoires. Donc, s'il n'y a pas de fichiers dans le répertoire source, rien ne sera copié.

2
MC ND

Si vous essayez d'utiliser un fichier .bat, le code sera le suivant:

Set src="C:\Users\me\Documents\a"
Set dest="C:\Users\me\Documents\b"

robocopy.exe %src% %dest%

Vous avez oublié de mettre le .exe

0
Alan Carlos

Essayez de cette façon

Set src=C:\Users\me\Documents\a
Set dest=C:\Users\me\Documents\b

robocopy %src% %dest% /E

/ E - pour copier un sous-dossier, y compris un sous-dossier vide

0
MOBASHIR IMAM