J'ai rencontré un bogue dans mon script DOS qui utilise des données de date et d'heure pour nommer les fichiers. Le problème était que je me suis retrouvé avec un écart parce que la variable de temps ne fournissait pas automatiquement le zéro initial pour l'heure <10. Donc, l'exécution> echo% time% donne: '9: 29: 17.88'.
Quelqu'un connaît-il un moyen de remplir conditionnellement les zéros de tête pour résoudre ce problème?
Plus d'informations: Ma commande de définition de nom de fichier est:
set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
qui finit par être: C: \ Temp \ robolog_20100602_ 93208.log (pour 9h23 du matin).
Cette question est liée à celle-ci .
Merci
Réponses:
Un moyen très simple consiste à remplacer simplement l'espace de tête par zéro:
echo %TIME: =0%
sorties:
09:18:53,45
la source
set HH=%time:~-11,2% set MM=%time:~-8,2% set SS=%time:~-5,2% set ISOTIME=%HH: =0%-%MM%-%SS% echo %ISOTIME%
Voir aussi ss64.com/nt/syntax-replace.htmlset timestring=%TIME: =0%
tôt dans le sous-appel - il suffit alors de travailler avec à latimestring
place (ou quelle que soit la variable que vous utilisez).Ma solution était d'utiliser l'idée suivante:
la source
but gives syntax error on server 2003
- pourquoi ça vous intéresse en 2016?Idée similaire à la réponse de Dennis . Le problème est que la largeur de
%time%
est toujours la même, donc elle insère un espace au début au lieu de renvoyer une chaîne plus courte.Vous pouvez vous en débarrasser avec
for
:Le reste est donc plus ou moins le même.
la source
En utilisant la contribution de Jesse, je viens de créer une variable avec la sortie modifiée. Ensuite, je référence cette variable pour construire la partie heure.
Avec la source d'origine:
Merci Jesse. J'aurais voté si j'avais les points de réputation.
la source
Pour la solution la plus compacte mettant en œuvre tout ce qui précède, je pense que
fonctionnerait ici sans ajouter de nouvelles lignes au script. C'est peut-être moins élégant que plusieurs solutions de commande, cependant ..
la source
Ce qui suit reprend quelques lignes mais est clair et compréhensible. Il enregistre stdout et stderr dans des fichiers séparés, chacun avec un horodatage. L'horodatage comprend l'année, le mois, le jour, l'heure, la minute et la seconde, dans cet ordre. Les horodatages doivent toujours avoir le composant de date le plus significatif en premier (année) et le composant le moins (secondes) en dernier. Cela permet aux listes de fichiers d'être dans l'ordre chronologique. Sans plus tarder, voici ma solution.
la source
Cela marque un zéro au début du temps et prend les deux derniers chiffres de l'heure (les minutes et les secondes positions de départ sont décalées d'une unité). Donc 3 heures du matin devient "03" puis "03" et l'heure 15 devient "015" puis "15".
Moins lisible:
la source
Une ligne de code fera ce dont vous avez besoin:
Par exemple, j'utilise% Date% puis j'ajoute un zéro non significatif à une variable que j'utilise pour déterminer si je dois remplacer l'espace principal par un zéro pour% Time%.
la source
Cela crée un horodatage triable et la deuxième ligne s'assure qu'il n'y a pas d'espace pour l'heure à un chiffre, etc., pour le rendre utilisable pour les scripts:
Sortie:
la source
Merci de l'aide d'en haut ... Voici ce que j'utilise:
J'ai ensuite des journaux qui sont appelés dans des travaux Robocopy comme celui-ci:
Il y en a beaucoup comme ceci:
Termine le travail avec ceci:
COMPLETE_LOG_2018-06-27_10_53_54.log
est le fichier produit à la fin et il est triable par nom de fichier.la source
La réponse de Jesse a résolu mon problème de changement de nom de fichier en éliminant l'espace dans le champ heure. Voici comment je règle mes variables:
Cela fonctionne comme un champion; pour une raison quelconque, la date n'a pas eu besoin du même traitement, mais j'imagine que cela dépend des paramètres régionaux.
la source
la source
la source