Nous avons un travail par lots qui s'exécute tous les jours et copie un fichier dans un dossier de collecte. Je veux également prendre une copie de ce fichier et le déposer dans un dossier d'archive avec le nom de fichier
yyyy-MM-dd.log
Quelle est la façon la plus simple de faire cela dans un travail par lots Windows?
Je recherche essentiellement un équivalent de cette commande Unix:
cp source.log `date +%F`.log
windows
batch-file
cmd
timestamp
Eoin Campbell
la source
la source
Réponses:
Mais cela dépend de la localisation. Je ne sais pas si
%DATE%
est localisé ou dépend du format spécifié pour la date courte dans Windows.Voici un moyen indépendant de la langue pour extraire la date actuelle de cette réponse , mais cela dépend de
WMIC
etFOR /F
:la source
2014-5.-01
(quand elle le serait2014-05-26
). Soyez donc très prudent, si vous publiez des scripts contenant cela!%time:~-11,2%-%time:~-8,2%-%time:~-5,2%
Cela a fonctionné pour moi et était une solution sûre pour les noms de fichiers (bien qu'elle génère un format MM-jj-AAAA):
La première commande prend une DATE et remplace
/
par-
, prend le TIME et remplace:
par-
, et les combine au format DATE @ TIME. La deuxièmeset
instruction supprime tous les espaces et la troisièmeset
remplace,
par.
et ajoute l'.jpg
extension.Le code ci-dessus est utilisé dans un petit script qui extrait des images d'une caméra IP de sécurité pour un traitement ultérieur:
la source
10-12-2014@14-22-59,44.jpg
avec une virgule avant les millisecondesset SAVESTAMP=%SAVESTAMP:,=.%.jpg
avant l'echo
instruction. Si cela fonctionne, je mettrai à jour la réponse.08.06.2016@15-42-20,33.jpg
sur mon ordinateur portable allemand et[email protected]
sur mon ordinateur anglais.yyyy-MM-dd
Pour les paramètres régionaux français (France) UNIQUEMENT , soyez prudent car
/
apparaît dans la date:Pour notre problème de fichier journal, voici ma proposition pour la langue française UNIQUEMENT :
la source
"_0:00"
(le caractère souligné est un espace)Voici une solution indépendante des paramètres régionaux (copie dans un fichier nommé SetDateTimeComponents.cmd):
J'ai mis tous mes scripts .cmd dans le même dossier (% SCRIPTROOT%); tout script nécessitant des valeurs de date / heure appellera SetDateTimeComponents.cmd comme dans l'exemple suivant:
Comme le montre l'exemple, vous pouvez appeler SetDateTimeComponents.cmd chaque fois que vous avez besoin de mettre à jour les valeurs de date / heure. Cacher le script d'analyse temporelle dans son propre fichier SetDateTimeComponents.cmd est un bon moyen de cacher les détails laids et, plus important encore, d'éviter les fautes de frappe.
la source
prompt $d $t
renvoie 30.05.2016 15: 35: 56,93 sur mon système.Parce que l'idée de les déchirer
%DATE%
et de les%TIME%
séparer et de les écraser semble au mieux fragile, voici une alternative qui utilise un oneliner PowerShell:La référence pour
get-date
est ici , avec des options de format pour les styles .NET et UNIX.la source
J'utilise fréquemment ceci et mets tout dans une commande de copie unique. L'exemple suivant copie le fichier example.txt sous le nom example_YYYYMMDD_HHMMSS.txt et vous pouvez bien sûr le modifier en fonction de votre format préféré. Les guillemets ne sont nécessaires que s'il y a des espaces dans la spécification de fichier. Si vous souhaitez réutiliser exactement la même date / horodatage, vous devez le stocker dans une variable.
la source
Cela garantira que la sortie est une valeur à 2 chiffres ... vous pouvez réorganiser la sortie à votre guise et tester en supprimant les commentaires de la section de diagnostic. Prendre plaisir!
(J'en ai beaucoup emprunté à d'autres forums ...)
la source
Créez un fichier avec la date actuelle comme nom de fichier (ex. 2008-11-08.dat)
Avec la date actuelle mais sans le "-" (ex. 20081108.dat)
la source
Peut-être que cela peut aider:
ou
la source
J'ai mis en place un petit programme C pour imprimer l'horodatage actuel (sécurité locale, pas de mauvais caractères ...). Ensuite, j'utilise la commande FOR pour enregistrer le résultat dans une variable d'environnement:
Voici un lien:
https://github.com/HarryPehkonen/dos-timestamp
la source
Je sais que ce fil est vieux mais je veux juste ajouter ceci ici car cela m'a beaucoup aidé à essayer de comprendre tout cela et c'est propre. La bonne chose à ce sujet est que vous pouvez le mettre en boucle pour un fichier de commandes toujours en cours d'exécution. Journal de disponibilité du serveur ou quelque chose. C'est pour ça que je l'utilise de toute façon. J'espère que cela aidera quelqu'un un jour.
la source
ERROR : Invalid Parameter #12 : "/LOG:C:\opt\Sync_08.10.2020_16:27:39.log"
Comme correctif, j'ai utilisé des tirets à la place:set FreshTime=%hour%-%min%-%secs%
Vous pouvez simplement détecter le format local actuel et obtenir la date dans votre format, par exemple:
la source
Je sais que c'est un ancien message, mais il y a une réponse beaucoup plus simple (même si cela ne fonctionne peut-être que dans les nouvelles versions de Windows). Utilisez simplement le paramètre / t pour les commandes DATE et TIME dos pour afficher uniquement la date ou l'heure et ne pas vous inviter à le définir, comme ceci:
la source
1) Vous pouvez télécharger GNU coreutils qui est livré avec la date GNU
2) vous pouvez utiliser VBScript , ce qui facilite la manipulation de la date sous Windows:
Exécutez le script en tant que:
la source
Cela fonctionne bien avec (ma) langue allemande, devrait être possible de l'ajuster à vos besoins ...
la source
%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
fonctionne aussi pour l'emplacement portugais! Je veux dire AAAAMMJJPour les gros fichiers zip pour le déploiement, j'utilise des quarts d'heure. Personne d'autre sur cette page ne l'avait mentionné auparavant, je vais donc mettre mon petit script ici:
Il ne met pas encore à zéro les quarts d'heure de minuit à 5 heures du matin, mais cela vous permet toujours d'avoir une version tamponnée plusieurs fois par jour avec peu de collisions.
J'espère que cela pourra aider.
la source
a utilisé la suggestion de Martin avec un petit ajustement pour ajouter un horodatage au nom du fichier:
Pour le 10:17:21 23/10/2019 Le résultat est:
la source