web-dev-qa-db-fra.com

Ligne de commande Windows: créer un fichier avec la date actuelle dans son nom

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 au format y/m/j à cause des barres obliques:

Zip some_options "archive_%DATE%.Zip"

La variable %DATE% se développe à quelque chose comme

Mon 09/28/2009

J'ai accès au paquet gnuwin32. Je pourrais donc utiliser, par exemple, sed pour remplacer les espaces et les barres obliques par des tirets. Le problème est de savoir 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 arrières pour évaluer une commande in-situ et utiliser sa sortie dans une autre commande, quelque chose comme:

Zip [...] archive_`echo %DATE% | sed -e s/.../.../`.Zip

Y a-t-il quelque chose de similaire disponible dans Windows?

Ou peut-être y a-t-il un moyen de définir une variable sur la valeur retournée de sed et de l'utiliser pour construire le nom de fichier?

19
Cristi Diaconescu

Vous pouvez remplacer les symboles dans les variables en utilisant:

set _date=%DATE:/=-%
27
Christopher

J'utilise toujours:

For /f "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDate=%%a%%b%%c%%d

Alors CDate sera Sat02182012. Si vous voulez le rendre plus triable, définissez CDate sur %% d - %% b - %% c pour que ce soit 2012-02-18

For /f "tokens=1,2 delims=:" %%f in ('time /t') do set CTime=%%f%%g

Pour rendre le dossier/fichier convivial.

5
släcker

J'ai posté une réponse à une question très similaire ici . Le fractionnement de la date dans les champs est effectué sur une ligne, au lieu de plusieurs lignes dans la réponse de harrymc.

La partie intéressante est:

@echo off
for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd=%%k%%j%%i
echo Date: %yyyymmdd%

Et l'avertissement est toujours d'actualité:

Avertissement : le format de la date (aaaammjj = %% k %% j %% i) dépend de vos paramètres régionaux. Étant donné que j'utilise le format de date français (jj/mm/aaaa), je dois utiliser "%% k %% j %% i" comme format (%% i = jour, %% j = mois, %% j = année).

Si vos paramètres régionaux sont définis sur le style américain (mm/jj/aaaa), vous devez utiliser "%% k %% i %% j" (%% i = mois, %% j = jour, %% j = année). .

4
Snark
Zip some_options "archive_%date:/=-%.Zip"

le /=- remplace le / par un signe moins.

3
Theo

Ce morceau de code plutôt horrible devrait faire quelque chose comme ce que vous voulez

move "Filename.txt" "Filename%date:~6,4%%date:~3,2%%date:~0,2%_%Time:~0,2%%Time:~3,2%%Time:~6,2%.txt"

Si vous modifiez le nom de fichier de manière appropriée.

2
Col

Puisque votre question porte la mention Windows, j'ai trouvé cette solution qui fonctionne dans les bons vieux fichiers .bat:
"Fichier de commandes Windows (.bat) pour obtenir la date actuelle au format MMJJAAAA" ,
et peut probablement être adapté à votre cas:

faire écho
@ REM Seamonkey, date rapide (format MMJJAAAA)
@ REM Setups% variable de date
@ REM Commence par analyser le mois, le jour et l’année en formats mm, jj, aaaa, puis se combine pour être MMJJAAAA

FOR/F "TOKENS = 1 * DELIMS =" %% A IN (DATE/T ") DO SET SETATE = %% B
FOR/F “JETONS = 1,2 éol =/DELIMS = /” %% A IN (DATE/T ’) DO SET mm = %% B
FOR/F “TOKENS = 1,2 DELIMS =/eol = /” %% A IN (’echo% CDATE%’) DO SET dd = %% B
"

cela ne fait que configurer la variable% date pour qu'elle soit la date du jour au format MMJJAAAA afin qu'elle puisse être appelée ultérieurement dans le script.

Modifier
Trouvé une meilleure syntaxe. Étant donné que ma date est aujourd'hui "lun 28/09/2009":
Jour fixé =% Date: ~ 0,2%
set month =% Date: ~ 7,2%
Année de référence =% Date: ~ 10,4%

2
harrymc

version pure de cmd.exe en combinaison avec gnuwin32-'date ':

%> for /F "usebackq" %d in ( `date.exe +"%y%m%d"` ) do Zip archive_%d.Zip <folder>
2
akira

Pour/f "jetons = 1, 2, 3, 4, 5 delims = /." %% a dans ('date/T') définit CDate = %% d - %% b - %% c

@echo data =% CDate%

Ceci est dans l'année-mois-jour qui est le plus commun maintenant jours

1
Buffme

Je suppose que si vous rassemblez tous les éléments, vous obtenez quelque chose qui fonctionne pour vous. Ceci est sur un système Windows 2003 pour me donner un instantané des processus en cours en réponse à un déclencheur du moniteur de performances:

@echo off
For /f "tokens=1,2,3,4,5 delims=/. " %%i in ('date /t') do set CDate=%%k%%j%%i
For /f "tokens=1,2 delims=:" %%f in ('time /t') do set CTime=%%f%%g
tasklist /fo table >tasklist%CDate%%CTime%.txt

Le fichier de sortie est nommé dans une chaîne sans délimiteurs.

1
Anton Liebscher

qu'en est-il de l'utilisation de cscript + vbasic:

WScript.Shell.run "Zip archive_" & DatePart("yyyy", Now) & "_" & DatePart("m", Now) & "_" & DatePart("d", Now) & ".Zip " & WScript.arguments(0)

appelez-le via

cscript /nologo Zip_it.vbs
1
akira

Toute solution utilisant soit %DATE% ou la sortie de date /t risque de ne pas fonctionner correctement si l'utilisateur a modifié ses paramètres régionaux. Par exemple, j'ai défini le format "date courte" sur "yyyy-MM-dd". J'ai donc %DATE% égal à "2012-02-18" et date /t produit le même résultat. (Ceci est pour Windows 7; je suppose que c'est la même chose pour les versions antérieures de Windows.)

Construisez un fichier de commandes, puis exécutez-le.

Puisque vous avez la commande GNU date disponible, vous pouvez faire quelque chose comme ceci:

C:\path\to\gnu\date "+Zip some_options archive_%Y-%m-%d.Zip" > tmp.bat
call .\tmp.bat

tmp.bat contiendra quelque chose comme:

Zip some_options archive_2012-02-18.Zip

Notez que cela crée tmp.bat dans le répertoire actuel, ce qui peut poser problème. il pourrait ê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 la commande date, similaire à une chaîne de formatage printf; voir la documentation de la date de coreutils pour plus de détails. Le format peut inclure du texte arbitraire. Dans ce cas, vous n'avez même pas besoin d'utiliser sed.

1
Keith Thompson
Zip [...] archive_`echo %DATE% | tr / -`.Zip

Devrait marcher.

D'autre part - vous avez peut-être la commande date disponible (je ne connais pas Windows). Si oui, alors faites juste:

Zip [...] archive_`date +'%Y-%m-%d'`.Zip
0
user7385