2015-12-16 4 views
0

Je suis en cours d'exécution de la commande suivante pour sauvegarder un dossier à une distance d'une Partagés comme un lecteur:journal Enregistrement de la commande robocopy à un fichier journal daté

REM Backup local documents to Q drive, only add new files does not remove old 
REM files 
echo -------------------------------------------------------------------------- 
echo Running backup to Q batch, only adding new files 
echo -------------------------------------------------------------------------- 
robocopy C:\WhatIWantToCopy^ 
    Q:\ /256 /V /S /IPG:125^ 
    /XF *.log /tee /ETA /XC /XN /XO^ 
    /XD C:\SomeRubbish^ 
    /log:C:\MyStuff\logs\robo_%_DATETIME.log 

La commande exécute mais la ligne:

/log:C:\MyStuff\logs\robo_%_DATETIME.log 

ne semble pas générer le fichier journal requis. Je voudrais que le fichier journal soit de structure robo_16-12-2015.log, reflétant la date actuelle.

+0

Les variables sont utilisées avec un signe de pourcentage au début ET à la fin: '% _datetime%' (en supposant qu'il soit défini) – Stephan

Répondre

1

Vous aurez besoin de construire la date dans le format que vous voulez. Cette snip devrait aider:

@ECHO OFF 

ECHO Date: %DATE% 
ECHO Time: %TIME% 

SET _datetime=%DATE:~7,2%-%DATE:~4,2%-%DATE:~10,4% 
ECHO %_datetime% 

Sur ma machine, cette commande affiche:

Date: Wed 12/16/2015 
Time: 14:42:08.21 
16-12-2015 

Si vous souhaitez inclure un horodatage Heure-Minute, mettre à jour simplement l'analyse syntaxique en conséquence la variable %TIME%:

SET _datetime=%DATE:~7,2%-%DATE:~4,2%-%DATE:~10,4%_%TIME:~0,2%-%TIME:~3,2% 
+0

Merci pour l'entrée utile. Par souci d'apprentissage, où puis-je apprendre à analyser la date et l'heure dans des fichiers batch? – Konrad

+1

@Konrad - '% DATE%' et '% TIME%' sont des variables intégrées. Je les analyse en utilisant la syntaxe de sous-chaîne 'SET' que vous pouvez voir ici:' SET /? –

1

J'ai résolu ce problème comme suit: mon serveur renvoie ceci:

@ECHO OFF 

ECHO Date: %DATE% 
ECHO Time: %TIME% 

Date: Thu 06/29/2017 
Time: 11:19:24.02 

Maintenant, je veux utiliser un fichier journal avec Robocopy qui a une partie "Year-Month-Day - Hour-Minute-Second" dans le nom de fichier. Le défi ici est de se débarrasser des caractères/et: car ils ne sont pas autorisés dans les noms de fichiers.

La solution: créer un fichier batch, par ex. setdtvar.cmd, ce en elle:

@ECHO OFF 

ECHO Date: %DATE% 
ECHO Time: %TIME% 

SET DTVARYEAR=%DATE:~10% 
ECHO %DTVARYEAR% 

SET DTVARDAY=%DATE:~7,2% 
ECHO %DTVARDAY% 

SET DTVARMONTH=%DATE:~4,2% 
ECHO %DTVARMONTH% 

SET DTVARTIMEHRS=%TIME:~0,2% 
ECHO %DTVARTIMEHRS% 

SET DTVARTIMEMIN=%TIME:~3,2% 
ECHO %DTVARTIMEMIN% 

SET DTVARTIMESEC=%TIME:~6,2% 
ECHO %DTVARTIMESEC% 

SET DTVAR=%DTVARYEAR%-%DTVARMONTH%-%DTVARDAY%--%DTVARTIMEHRS%-%DTVARTIMEMIN%-%DTVARTIMESEC% 

ECHO %DTVAR% 

Sur mon serveur, la variable DTVAR retourne maintenant la date et l'heure dans le format que j'ai besoin, par exemple:

2017-06-29--11-19-24 

Pour activer cette fonction pour Robocopy: Chaque fichier batch contenant des commandes robocopy appelle d'abord le fichier setdtvar.cmd (appelez setdtvar.cmd dans la première ligne). Cela définit la variable DTVAR dans le contexte du processus qui exécute le fichier de commandes. Ensuite, dans la commande Robocopy log file, j'utilise% DTVAR% dans le nom de fichier du fichier journal.