Dans un script batch Windows (Windows XP), je dois formater la date et l'heure actuelles pour une utilisation ultérieure dans les noms de fichiers, etc.
Il est similaire à la question Stack Overflow Comment ajouter une date dans des fichiers de commandes , mais aussi avec l'heure.
J'ai ceci jusqu'à présent:
echo %DATE%
echo %TIME%
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
echo %datetimef%
qui donne:
28/07/2009
8:35:31.01
2009_07_28__ 8_36_01
Existe-t-il un moyen de permettre une heure à un seul chiffre en% TIME%, afin que je puisse obtenir ce qui suit?
2009_07_28__08_36_01
windows
datetime
formatting
batch-file
Laurie
la source
la source
datetimef
variable et mettre des 0 à la place. Sur votre exemple:SET datetimef=%datetimef: =0%
Réponses:
J'ai fini avec ce script:
:: Sur WIN2008R2, par exemple, j'avais besoin de faire de votre 'set month =% date: ~ 3,2%' comme ci-dessous :: sinon 00 apparaît pour MOIS
la source
la source
Voici comment je génère un nom de fichier journal (basé sur http://ss64.com/nt/syntax-getdate.html ):
la source
Je le fais généralement de cette façon chaque fois que j'ai besoin d'une chaîne de date / heure:
Ceci est pour le format de date / heure allemand (jj.mm.aaaa hh: mm: ss). Fondamentalement, je concatène les sous-chaînes et remplace enfin tous les espaces par des zéros.
Brève explication du fonctionnement des sous-chaînes:
Donc, pour obtenir uniquement l'année à partir d'une date comme "29.03.2018", utilisez:
la source
Si PowerShell est installé, vous pouvez facilement et de manière fiable obtenir la date / heure dans le format de votre choix, par exemple:
Bien sûr, de nos jours, PowerShell est toujours installé, mais sur Windows XP, vous ne souhaiterez probablement utiliser cette technique que si votre script de traitement par lots est utilisé dans un environnement connu où vous savez que PS est disponible (ou archivez votre fichier de commandes si PowerShell est disponible ...)
Vous pouvez raisonnablement demander: pourquoi utiliser un fichier de commandes si vous pouvez utiliser PowerShell pour obtenir la date / l'heure, mais je pense que certaines raisons évidentes sont: (a) vous n'êtes pas très familier avec PowerShell et préférez toujours faire la plupart les choses à l'ancienne avec des fichiers batch ou (b) vous mettez à jour un ancien script et vous ne voulez pas porter le tout sur PS.
la source
Je suis tombé sur ce problème aujourd'hui et je l'ai résolu avec:
Il remplace les espaces par des 0 et met à zéro l'heure.
Après quelques recherches rapides, je n'ai pas découvert si cela nécessitait des extensions de commande (fonctionnait toujours avec SETLOCAL DISABLEEXTENSIONS).
la source
:
)?echo %TIME: =:%
mais si ce n'est pas le cas, essayez peut-être d'échapper au:
avec un^
likeecho %TIME: =^:%
(qui fonctionne aussi pour moi).Comme cela a été noté, l'analyse de la date et de l'heure n'est utile que si vous connaissez le format utilisé par l'utilisateur actuel (par exemple, MM / jj / aa ou jj-MM-aaaa pour n'en nommer que deux). Cela pourrait être déterminé, mais au moment où vous ferez tout le stress et l'analyse, vous vous retrouverez toujours avec une situation dans laquelle un format inattendu est utilisé et d'autres ajustements seront nécessaires.
Vous pouvez également utiliser un programme externe qui renverra un slug de date dans votre format préféré, mais qui présente les inconvénients de devoir distribuer le programme utilitaire avec votre script / lot.
Il existe également des astuces par lots utilisant l'horloge CMOS de manière assez brute, mais c'est trop proche des fils nus pour la plupart des gens, et ce n'est pas toujours l'endroit préféré pour récupérer la date / l'heure.
Voici une solution qui évite les problèmes ci-dessus. Oui, cela présente d'autres problèmes, mais pour mes besoins, j'ai trouvé que c'était la solution la plus simple, la plus claire et la plus portable pour créer un horodatage dans des fichiers .bat pour les systèmes Windows modernes. Ceci n'est qu'un exemple, mais je pense que vous verrez comment modifier d'autres formats de date et / ou d'heure, etc.
la source
reg query "HKCU\Control Panel\International" /v sShortDate
pièce sans modifier le paramètre de registre (exercice laissé au lecteur!).Ce qui suit n'est peut-être pas une réponse directe, mais une réponse proche?
Au moins, cela peut être inspirant.
la source
Si vous n'avez pas exactement besoin de ce format:
Ensuite, vous pouvez utiliser les 3 lignes de code suivantes qui utilisent% date% et% time%:
Remarque: les caractères
/
et:
sont supprimés et le caractère.
et l'espace sont remplacés par un trait de soulignement.Exemple de sortie (prise le mercredi 8/5/15 à 12 h 49 avec 50 secondes et 93 millisecondes):
la source
la source
Le
offset:length
formatage pris en charge avec laSET
commande sous Windows ne vous permettra pas de remplir le fichier0
comme vous semblez intéressé.Cependant, vous pouvez coder un script BATCH pour vérifier que l'heure est inférieure à
10
etajouter en conséquence une
echo
chaîne différente .Vous trouverez quelques informations sur la
SET
commande sur ce lien .Vous pouvez également passer à d'autres méthodes de programmation pour y arriver.
Il est assez simple sous unix bash (disponible avec Cygwin sous Windows) de dire simplement,
Et, il se tamponne toujours correctement.
la source
Je l'ai fait de cette façon:
la source
La première ligne sort toujours dans ce format en ce qui
concerne le fuseau horaire: 20150515150941.077000 + 120
Cela vous laisse simplement formater la sortie en fonction de vos souhaits.
la source
Ce fichier bat (enregistrer sous datetimestr.bat) produit la chaîne datetime 3 fois: (1) longue chaîne datetime avec jour de la semaine et secondes, (2) courte chaîne datetime sans eux et (3) version courte du code.
Pour donner un crédit approprié, j'ai fusionné les concepts de Peter Mortensen (18 juin 14 à 21 h 02) et opello (25 août 11 à 14 h 27).
Vous pouvez écrire cela beaucoup plus court, mais cette version longue facilite la lecture et la compréhension du code.
la source
Je suis vraiment nouveau dans les fichiers batch et c'est mon code !! (Je ne sais pas pourquoi, mais je ne pouvais pas combiner date / t et heure / t ensemble et je ne pouvais pas utiliser % date% et % time% directement sans variable ...)
Il est en quelque sorte réutilisé par d'autres (la question était d'obtenir un timedate formaté à utiliser comme nom de fichier).
la source
Il existe un autre moyen simple de le faire:
la source
Pour générer un
YYYY-MM-DD hh:mm:ss
horodatage (24 heures), j'utilise:la source
%TIME%
et%DATE%
utilisent respectivement le même format que les commandesTIME
etDATE
. Sur mon système, les variables ne correspondent pas à mes paramètres régionaux.Ce script batch fera exactement ce que l'OP veut (testé sur Windows XP SP3).
J'ai également utilisé cette astuce de registre intelligente décrite par "jph" précédemment, qui à mon humble avis est le moyen le plus simple d'obtenir un formatage cohérent à 100% de la date à
"yyyy_MM_dd"
sur n'importe quel système Windows, nouveau ou ancien. Le changement d'une valeur de Registre pour ce faire est instantané temporaire et insignifiant; il ne dure que quelques millisecondes avant d'être immédiatement rétabli.Double-cliquez sur ce fichier de commandes pour une démonstration instantanée, la fenêtre d'invite de commandes apparaîtra et affichera votre horodatage. . . . .
la source
la source
Créez un fichier appelé "search_files.bat" et placez le contenu ci-dessous dans le fichier. Puis double-cliquez dessus. La variable temporaire% THH% a été mise en place pour gérer le MA de manière appropriée. S'il y a un 0 dans les 2 premiers chiffres de l'heure, Windows ignore le reste du nom de fichier du fichier LOG.
la source
J'aime la version courte au-dessus de @The lorax, mais pour d'autres paramètres de langue, cela peut être légèrement différent.
Par exemple, dans les paramètres de langue allemande (avec le format de date naturel: jj.mm.aaaa), la requête du mois doit être modifiée de 4,2 à 3,2:
la source
C'est mes 2 cents pour un
datetime string
. Sur lesMM DD YYYY
systèmes, permutez les première et deuxième%DATE:~
entrées.la source
J'ai essayé la réponse acceptée et cela fonctionne plutôt bien. Malheureusement, le format de l'heure américain semble être H: MM: SS.CS, et le 0 manquant à l'avant causait des problèmes d'analyse avant 10 heures. Pour surmonter cet obstacle et permettre également l'analyse de la plupart des formats d'heure mondiale, j'ai mis au point cette routine simple qui semble fonctionner assez bien.
La bonne chose avec cette routine est que vous passez la chaîne de temps comme premier paramètre et le nom de la variable d'environnement que vous voulez contenir l'heure (en centisecondes) comme deuxième paramètre. Par exemple:
(* Chris *)
la source
Peut-être quelque chose comme ça:
la source
Dans des situations comme celle-ci, utilisez une approche de programmation simple et standard: au lieu de dépenser un énorme effort pour analyser une entité inconnue, enregistrez simplement la configuration actuelle, réinitialisez-la à un état connu, extrayez les informations, puis restaurez l'état d'origine. Utilisez uniquement des ressources Windows standard.
Plus précisément, les formats de date et d'heure sont stockés sous la clé de registre HKCU \ Control Panel \ International \ dans [MS definition] "values": "sTimeFormat" et "sShortDate". Reg est l'éditeur de registre de console inclus avec toutes les versions de Windows. Des privilèges élevés ne sont pas requis pour modifier la clé HKCU
Simple, direct et devrait fonctionner pour toutes les régions.
Pour des raisons que je ne comprends pas, la réinitialisation de la valeur "sShortDate" prend effet immédiatement dans une fenêtre de console, mais la réinitialisation de la valeur "sTimeFormat" très similaire ne prend PAS effet jusqu'à ce qu'une nouvelle fenêtre de console soit ouverte. Cependant, la seule chose modifiable est le délimiteur - les positions des chiffres sont fixes. De même, le jeton de temps "HH" est censé ajouter des zéros non significatifs, mais ce n'est pas le cas. Heureusement, les solutions de contournement sont faciles.
la source
sTimeFormat
format de l' heure est inutile . Nan. Comme il affecte l'invite de la console suivante, appliquez-le en utilisantfor /f "delims=" %%G in ('cmd /C echo SET "DateTime=%%date%%__%%time%%"') do %%G
Ce script utilise une interface WMI accessible principale via l'outil WMIC, qui fait partie intégrante de Windows depuis Windows XP Professionnel (l'édition familiale est également prise en charge, mais l'outil n'est pas installé par défaut). Le script implémente également une solution de contournement de l'outil WMIC manquant en créant et en appelant un vbscript WSH pour accéder à une interface WMI et écrire dans la sortie de la console l'heure avec le même format que celui fourni par l'outil WMIC.
la source
Une belle astuce sur une seule ligne pour éviter l'expansion précoce des variables consiste à utiliser
cmd /c echo ^%time^%
la source
la source
Pour une solution très simple pour la date numérique à utiliser dans les noms de fichiers, utilisez le code suivant:
la source
Divisez les résultats de la commande de date par une barre oblique, puis vous pouvez déplacer chacun des jetons dans les variables appropriées.
la source