J'essaie de créer un fichier zip à partir d'un script batch. J'ai besoin qu'il soit nommé comme archive_.zip
Malheureusement, cela ne fonctionne pas sur les systèmes dont la date est formatée comme y / m / d en raison des barres obliques:
zip some_options "archive_%DATE%.zip"
La %DATE%
variable se développe en quelque chose comme
Mon 09/28/2009
J'ai accès au paquet gnuwin32, donc je pourrais utiliser, disons, sed
pour remplacer les espaces et les barres obliques par des tirets. Le problème est, comment utiliser la sortie de sed
pour créer le nom de fichier de l'archive zip?
Sous Unix (bash), on peut utiliser des guillemets pour évaluer sur place une commande et utiliser sa sortie dans une autre commande, quelque chose comme:
zip [...] archive_`echo %DATE% | sed -e s/.../.../`.zip
Existe-t-il quelque chose de similaire disponible dans Windows?
Ou peut-être existe-t-il un moyen de définir une variable sur la valeur renvoyée sed
et de l'utiliser pour construire le nom du fichier?
la source
%date:~-10,2%-%date:~-7,2%-%date:~-4,4%
:!J'utilise toujours:
Ensuite, CDate sera Sat02182012. Si vous voulez le rendre plus triable, définissez CDate sur %% d - %% b - %% c pour que ce soit le 2012-02-18
Pour rendre le dossier / fichier convivial pour la date et l'heure
la source
J'ai posté une réponse à une question très similaire ici . Le fractionnement de la date dans les champs se fait sur 1 ligne, au lieu de plusieurs lignes dans la réponse de harrymc.
La partie intéressante est:
Et l'avertissement est toujours d'actualité:
la source
les
/=-
remplaçants/
avec un signe moins.la source
Ce morceau de code plutôt horrible devrait faire quelque chose comme ce que vous voulez
Si vous modifiez le nom de fichier de manière appropriée.
la source
echo %date:~6,4%%date:~3,2%%date:~0,2%
revient9-289-20
sur ma machine depuis que j'ai la date fixée pour utiliser aaaa-MM-jj (donc aujourd'hui est le 2009-09-28).Puisque votre question est étiquetée comme Windows, j'ai trouvé cette solution qui fonctionne dans les bons vieux fichiers .bat:
"Windows Batch File (.bat) pour obtenir la date actuelle au format MMDDYYYY" ,
et peut probablement être adaptée à votre cas:
cela ne fait que configurer la variable% date pour qu'elle soit la date d'aujourd'hui au format MMDDYYYY afin qu'elle puisse être appelée plus tard dans le script.
Modifier
Trouvé une meilleure syntaxe. Étant donné que ma date est aujourd'hui "Lun 28/09/2009":
jour défini =% Date: ~ 0,2%
mois défini =% Date: ~ 7,2%
année définie =% Date: ~ 10,4%
la source
version pure cmd.exe en combinaison avec gnuwin32-'date ':
la source
qu'en est-il de l'utilisation de cscript + vbasic:
appeler via
la source
Pour / f "jetons = 1,2,3,4,5 delims = /." %% a dans ('date / T') définissez CDate = %% d - %% b - %% c
@echo data =% CDate%
C'est dans l'année-mois-jour qui est le plus courant aujourd'hui
la source
Toute solution qui utilise l'un
%DATE%
ou l' autre ou la sortie dedate /t
est susceptible de se casser si l'utilisateur a modifié ses paramètres régionaux. Par exemple, j'ai défini mon format "date courte" sur"yyyy-MM-dd"
, donc j'ai%DATE%
égal à"2012-02-18"
, etdate /t
produit la même sortie. (C'est pour Windows 7; je suppose que c'est la même chose pour les versions antérieures de Windows.)Créez un fichier de commandes, puis exécutez-le.
Puisque vous disposez de la
date
commande GNU , vous pouvez faire quelque chose comme ceci:tmp.bat
contiendra quelque chose comme:Notez que cela crée
tmp.bat
dans le répertoire courant, ce qui pourrait être un problème; il serait peut-être préférable de créer%TEMP%\tmp.bat
. Je n'ai pas non plus supprimé le fichier par la suite; c'est assez facile à faire.date +FORMAT
vous permet de spécifier le format de sortie de ladate
commande, semblable à uneprintf
chaîne de format; voir la documentation de date coreutils pour plus de détails. Le format peut inclure du texte arbitraire, dans ce cas, vous n'avez même pas besoin de l'utilisersed
.la source
Je suppose que si vous rassemblez les morceaux de tout le monde, vous obtenez quelque chose qui fonctionne pour vous. C'est sur un système Windows 2003 pour me donner un instantané des processus en cours d'exécution en réponse à un déclencheur du moniteur de performances:
Le fichier de sortie est nommé dans une chaîne sans délimiteur.
la source
Devrait marcher.
D'un autre côté - peut-être avez-vous une
date
commande disponible (je ne connais pas Windows). Si oui, alors faites simplement:la source
Je ne sais pas si cela vous convient, mais mon code est
la source