Format de fichier date YYYYMMDD dans le lot
Je travaille sur un code dans un fichier de commandes qui donne deux dates de fichier. Si une date est supérieure à l'autre, puis il exécute un autre fichier bat. Ce que je veux faire est de formater les deux dates AAAAMMJJ afin que je puisse utiliser le GTR
(plus de).
Le code est ci-dessous, mais et il fonctionne si j'utilise ==
(l'égalité des) parce que c'est l'évaluation de la chaîne. Je veux seulement savoir si une date de fichier est plus grand que l'autre la date du fichier.
Je ne suis pas demander à quelqu'un de modifier le code ci-dessous mais si vous pouvez me montrer comment faire pour formater les dates, je serais très reconnaissant.
set Fileone=File1.txt
set FileTwo=File2.txt
pushd "D:\Board\Broadcast\FA_Report8_A"
FOR %%f IN (%FileOne%) DO SET filedatetime=%%~tf
FOR %%f IN (%FileTwo%) DO SET filedatetime2=%%~tf
SET filedatetime2=%year%%month%%day%
IF %filedatetime:~0, 10% GTR %filedatetime2:~0, 10% (
echo FileOne Greater - run bat
timeout /t 20 /nobreak
goto Finish
) else (
echo FileOne not Greater - Finish
goto Finish
)
:Finish
echo finished
pause
- Une bonne référence est ici: robvanderwoude.com/datetimentmath.php
Vous devez vous connecter pour publier un commentaire.
Il n'est pas portable entre les machines avec différents formats de date, mais le plus simple est d'utiliser une sous-chaîne:
%var:~STARTPOS,LENGTH%
Vous pouvez séparer un jour dans ses parties avec un POUR la commande /F:
Ce formulaire ne vous empêche de faire une erreur dans la position ou la taille de chaque sous-chaîne, et il est très facile de changer l'ordre des parties. Par exemple, si votre date est MM/JJ/AAAA:
Type DE /? pour plus de détails.
La mise en page pour la date de chaînes de variables dans le système peut être assumé par les paramètres de l'utilisateur, en régional et/ou de la langue, donc, la date n'est pas à 100% prévisible disposition pour travailler avec.
Essayez d'utiliser
wmic OS Get localdatetime /value
parce que le résultat est 100% prévisible:DONC, si vous utilisez à la boucle for, l'ajout de 2 séparateurs comme
=.
, (l'égalité et de la dot), vous allez obtenir cette chaîne de sortie:La mise en page à partir de cette commande est prévisible et fonctionne indépendamment des paramètres régionaux, les paramètres de l'utilisateur ou du système de la langue, donc, la commande retournera toujours:
Dans le fichier bat:
En ligne de commande:
Commandes de cette suite ::
Je peux aussi proposer:
Dans la boucle pour:
Résultat:
La différence est pas de zéro dans le nombre de mois/jour moins égale à 9, vous pouvez donc utiliser cette chauve-souris pour mettre zéro dans ce cas:
Résultat dans YearMonthDay:
Obs.: Dans PowerShell, la mise en page peut être personnalisée simple par:
La chaînes peut être réglé avec
ToString
.La commande Powershell suivante:
Résultat:
Voir plus sur la date de la disposition des variables de sortie dans le lot ici:
Donc désolé par mon peu de anglais...