Comment enregistrer la date actuelle au format AAAA-MM-JJ dans une variable d'un fichier .bat Windows?
Analogique du shell Unix:
today=`date +%F`
echo $today
windows
batch-file
Maksym Polshcha
la source
la source
Réponses:
Vous pouvez obtenir la date actuelle de manière indépendante des paramètres régionaux en utilisant
Ensuite, vous pouvez extraire les pièces individuelles à l'aide de sous-chaînes:
Une autre façon, où vous obtenez des variables contenant les parties individuelles, serait:
Beaucoup plus agréable que de jouer avec des sous-chaînes, au détriment de la pollution de votre espace de noms variable.
Si vous avez besoin de l'heure UTC au lieu de l'heure locale, la commande est plus ou moins la même:
la source
for /f
renvoie deux lignes, la dernière étant vide. Vous pouvez résoudre cela en utilisantset MyDate=
entre les deux. Je suppose que c'est ce sur quoi user2023861 est tombé.Year
,Month
,Day
,Hour
,Minute
,Second
,Quarter
,WeekInMonth
,DayOfWeek
for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x set today=%Year%-%Month%-%Day%
est une réponse invalide: elle renvoie un mois et un jour. Comment obtenir un remplissage à gauche de 2 chiffres avec zéro chaîne de mois et de jour à date?Si vous souhaitez y parvenir en utilisant les commandes MS-DOS standard dans un fichier de commandes, vous pouvez utiliser:
Je suis sûr que cela peut être amélioré, mais cela donne la date en 3 variables pour le jour (jj), le mois (mm) et l'année (aaaa). Vous pouvez ensuite les utiliser plus tard dans votre script batch, si nécessaire.
Bien que je sache qu'une réponse a été acceptée pour cette question, cette méthode alternative peut être appréciée par beaucoup qui cherchent à y parvenir sans utiliser la console WMI, j'espère donc qu'elle ajoute une certaine valeur à cette question.
la source
Utilisation
date /T
pour trouver le format sur l'invite de commande.Si le format de date est
Thu 17/03/2016
utilisé comme ceci:la source
SELECT CONVERT(VARCHAR(16), GETDATE(), 112)
".%date:~10,4%%date:~7,2%%date:~4,2%T%time:~0,2%%time:~3,2%%time:~6,2%
Deux autres méthodes qui ne dépendent pas des paramètres d'heure (toutes deux tirées de Comment obtenir les données / l'heure indépendamment de la localisation ). Et les deux ont également le jour de la semaine et aucun d'entre eux ne nécessite des autorisations d'administrateur!:
MAKECAB - fonctionnera sur TOUS les systèmes Windows (rapide, mais crée un petit fichier temporaire) (le script foxidrive):
ROBOCOPY - ce n'est pas une commande native pour Windows XP et Windows Server 2003 , mais elle peut être téléchargée à partir du site Microsoft . Mais il est intégré à tout à partir de Windows Vista et supérieur:
Et trois autres façons d'utiliser d'autres langages de script Windows. Ils vous donneront plus de flexibilité, par exemple, vous pouvez obtenir la semaine de l'année, le temps en millisecondes, etc.
Hybride JScript / BATCH (doit être enregistré sous
.bat
). JScript est disponible sur tous les systèmes à partir de Windows NT et supérieur, en tant que partie de Windows Script Host ( bien qu'il puisse être désactivé via le registre, c'est un cas rare ):Hybride VBScript / BATCH ( Est-il possible d'incorporer et d'exécuter VBScript dans un fichier batch sans utiliser de fichier temporaire? ) Même cas que jscript, mais l'hybridation n'est pas si parfaite:
PowerShell - peut être installé sur chaque machine équipée de .NET - téléchargement depuis Microsoft ( v1 , v2 et v3 (uniquement pour Windows 7 et supérieur)). Installé par défaut sur tout sous Windows 7 / Win2008 et supérieur:
Jscript.net/batch auto-compilé (je n'ai jamais vu de machine Windows sans .NET donc je pense que c'est un joli portable):
Bûcheron Cela ne peut pas obtenir l'année et le jour de la semaine. Il est relativement lent, crée également un fichier temporaire et est basé sur les horodatages que logman met sur ses fichiers journaux. Fonctionnera tout à partir de Windows XP et supérieur. Il ne sera probablement jamais utilisé par personne - y compris moi - mais c'est une autre façon ...
Plus d'informations sur la fonction Get-Date .
la source
J'ai beaucoup aimé la méthode de Joey, mais j'ai pensé que je la développerais un peu.
Dans cette approche, vous pouvez exécuter le code plusieurs fois sans vous soucier du fait que l'ancienne valeur de date "reste" car elle est déjà définie.
Chaque fois que vous exécutez ce fichier de commandes, il génère une représentation combinée de la date et de l'heure compatible ISO 8601.
Dans cette version, vous devrez faire attention à ne pas copier / coller le même code à plusieurs endroits dans le fichier car cela entraînerait des étiquettes en double. Vous pouvez soit avoir une étiquette distincte pour chaque copie, soit simplement mettre ce code dans son propre fichier de commandes et l'appeler à partir de votre fichier source si nécessaire.
la source
Utilisez simplement la
%date%
variable:la source
Selon la réponse de @ProVi, modifiez simplement le format dont vous avez besoin
reviendra
EDIT Selon le commentaire @Jeb, qui est correct, le format d'heure ci-dessus ne fonctionnera que si votre commande DATE / T renvoie
Cependant, il est facile de le modifier en fonction de vos paramètres régionaux, en utilisant l'indexation de chaque caractère dans la chaîne renvoyée par la variable d'environnement% DATE% appropriée, vous pouvez extraire les parties de la chaîne dont vous avez besoin.
par exemple. L'utilisation de% DATE ~ 10,4% étendrait la variable d'environnement DATE, puis n'utiliserait que les 4 caractères commençant au 11e caractère (décalage 10) du résultat développé
Par exemple, si vous utilisez des dates de style américain, ce qui suit s'applique
la source
J'ai défini une variable d'environnement sur la valeur au format numérique souhaité en faisant ceci:
la source
Vérifier celui-ci..
la source
Si vous avez installé Python, vous pouvez faire
Vous pouvez facilement adapter la chaîne de format à vos besoins.
la source
python -c "import datetime;print(datetime.date.today())"
, car la__str__
méthode de ladate
classe appelle simplementisoformat()
.Il est possible d'utiliser PowerShell et de rediriger sa sortie vers une variable d'environnement à l'aide d'une boucle.
Depuis la ligne de commande (
cmd
):Dans un fichier de commandes, vous pouvez vous échapper
%a
comme%%a
:la source
FOR /F "tokens=*" %%a IN ('powershell get-date -format "{yyyy\-MM\-dd\THH\:mm\:ss}"') DO SET date=%%a
, utilisez MM en haut pour le mois et une barre oblique inverse pour échapper les caractères littéraux.En raison du format de la date et de l'heure et des informations spécifiques à l'emplacement, leur récupération à partir des variables% date% et% time% nécessitera un effort supplémentaire pour analyser la chaîne avec la transformation du format en considération. Une bonne idée est d'utiliser une API pour récupérer la structure de données et analyser comme vous le souhaitez. WMIC est un bon choix. L'exemple ci-dessous utilise Win32_LocalTime . Vous pouvez également utiliser Win32_CurrentTime ou Win32_UTCTime .
Résultat:
2018-04-25_10: 03: 11
la source
C'est une extension de la réponse de Joey pour inclure l'heure et remplir les parties avec des 0.
Par exemple, le résultat sera 2019-06-01_17-25-36. Notez également qu'il s'agit de l'heure UTC.
la source
la source
J'utilise ce qui suit:
Ou en combinaison avec un nom de fichier journal 'MyLogFileName':
la source
Si PowerShell est disponible, vous pouvez utiliser les codes ci-dessous:
Voici le résultat:
la source
Si un investissement unique de 10 à 30 minutes ne vous dérange pas pour obtenir une solution fiable (qui ne dépend pas des paramètres régionaux de Windows), veuillez lire la suite.
Libérons nos esprits. Voulez-vous simplifier les scripts pour qu'ils ressemblent à ceci? (Supposons que vous souhaitiez définir la variable LOG_DATETIME)
Vous pouvez. Créez simplement un FormatNow.exe avec C # .NET et ajoutez-le à votre PATH.
Remarques:
Avantages:
Code source de FormatNow.exe que j'ai construit avec Visual Studio 2010 (je préfère le construire moi-même pour éviter le risque de télécharger un programme inconnu, éventuellement malveillant). Copiez et collez simplement les codes ci-dessous, créez le programme une fois, puis vous aurez un formateur de date fiable pour toutes les utilisations futures.
En général, lorsque nous traitons des logiques compliquées, nous pouvons le simplifier en construisant un très petit programme et en appelant le programme pour capturer la sortie vers une variable de script batch à la place. Nous ne sommes pas des étudiants et nous ne passons pas d'examens nous obligeant à suivre la règle du script par lots uniquement pour résoudre les problèmes. Dans un environnement de travail réel, toute méthode (légale) est autorisée. Pourquoi devrions-nous encore nous en tenir aux faibles capacités du script batch Windows qui nécessite des solutions de contournement pour de nombreuses tâches simples? Pourquoi devrions-nous utiliser le mauvais outil pour le travail?
la source