web-dev-qa-db-fra.com

Comment créer un dossier avec le nom comme date actuelle dans des fichiers de traitement par lots (.bat)

Je ne connais pas beaucoup la syntaxe de fichier Windows .bat. Mon exigence simple est de créer un dossier à un emplacement spécifique avec nom comme date actuelle. J'ai essayé de chercher ceci sur google mais je n'ai pas eu de bonne option. Y a-t-il un moyen de faire ça?

32
Ramesh Soni

Essayez ceci (un équivalent des citations arrières bash):

for /f "tokens=1* delims=" %%a in ('date /T') do set datestr=%%a
mkdir %datestr%

Pour plus d'informations, voir http://ss64.com/nt/for_cmd.html

17
Franck Freiburger
mkdir %date:~-4,4%%date:~-10,2%%date:~7,2%
35
Stefano Travelli

Rapide et sale: Si vous pouvez vivre avec la date étant UTC au lieu de local, vous pouvez utiliser:

for /f "skip=1" %%d in ('wmic os get localdatetime') do if not defined mydate set mydate=%%d
md %mydate:~0,8%

Fonctionne dans tous les lieux. Seulement sur XP et supérieur, cependant.

19
Joey

Vous devez vous débarrasser des caractères '/' de la date avant de pouvoir l'utiliser dans mkdir comme ceci:

setlocal enableextensions
set name=%DATE:/=_%
mkdir %name%
13
Simon G.

Si vous voulez le format mm-dd-yyyy, vous pouvez utiliser: 

mkdir %date:~-10,2%"-"%date:~7,2%"-"%date:~-4,4%
8
jelde015
echo var D = new Date() > tmp.js 
echo D = (D.getFullYear()*100+D.getMonth()+1)*100+D.getDate() >> tmp.js 
echo WScript.Echo( 'set YYYYMMDD='+D ) >> tmp.js 
echo @echo off > tmp.bat 
cscript //nologo tmp.js >> tmp.bat 
call tmp.bat
mkdir %YYYYMMDD%
7
Simon G.

Cela dépend des paramètres régionaux de l'ordinateur. Vérifiez donc d'abord la sortie de la date à l'aide de la commande Invite ou en faisant un écho de date.

Pour ce faire, créez un fichier de commandes et ajoutez le contenu ci-dessous.

echo %date%<br\>    
pause

Il produit une sortie, dans mon cas, il montre Fri 05/06/2015.

Maintenant, nous devons nous débarrasser de la barre oblique (/)

Pour cela inclure le code ci-dessous dans le fichier de commandes.

set temp=%DATE:/=%

si vous faites écho au "temp", vous pouvez voir la date sans la barre oblique.


Il ne vous reste plus qu'à formater la date comme vous le souhaitez.

Par exemple, j'ai besoin de la date au format AAAAMMJJ, puis je dois définir le nom du répertoire comme suit

Pour expliquer comment cela fonctionne, nous devons comparer la valeur de temp

Ven. 05062015.

placez maintenant chaque caractère avec les chiffres commençant par 0.

Ven. 0506201 5

01234567891011

Donc, pour le format de date dont j'ai besoin, c'est 20150605,

L'année 2015, dans laquelle 2 est en 8ème position, donc de la 8ème à 4 places, cela fera 2015.

Le mois 06, dans lequel 0 est en 6ème position, donc de la 6ème position à 2 places, il fera 06.

Le jour 05, où 0 est en 4ème position, donc de la 4ème position à 2 places, cela fera 05.

Enfin, pour mettre en place le format final, nous avons le ci-dessous.

SET dirname="%temp:~8,4%%temp:~6,2%%temp:~4,2%"

Pour améliorer ce format de date avec "-" ou "_" entre la date, le mois et l'année, vous pouvez modifier avec ci-dessous 

SET dirname="%temp:~8,4%-%temp:~6,2%-%temp:~4,2%"

ou 

SET dirname="%temp:~8,4%_%temp:~6,2%_%temp:~4,2%"

Donc, le code de lot final sera 

=============================================== ====

@echo off<br\>    
set temp=%DATE:/=%<br\>
set dirname="%temp:~8,4%%temp:~6,2%%temp:~4,2%"<br\>
mkdir %dirname%<br\>

=============================================== ====

Le répertoire sera créé à l'endroit où ce lot est exécuté.

6
nirmalraj17
for /F “tokens=1-4 delims=/ ” %%A in (‘date /t’) do (
    set DateDay=%%A
    set DateMonth=%%B
    set DateYear=%%C
)
set CurrentDate=%DateDay%-%DateMonth%-%DateYear%
md %CurrentDate%

Cela vous donnera un dossier nouvellement créé avec la date du jour, au format JJ-MM-AA.

Source: Base de connaissances d'ALi

5
Mark snow

J'ai eu un problème avec cela parce que mon serveur devait ABSOLUMENT avoir sa date au format MM/jj/aaaa, alors que je voulais que le répertoire soit au format AAAA-MM-JJ pour des raisons de propreté. Voici comment l’obtenir au format AAAA-MM-JJ, quels que soient les paramètres régionaux définis.

Découvrez ce qui s'affiche lorsque vous utilisez% DATE%:

A partir d'une invite de commande, tapez: 

ECHO %DATE%

Le mien est sorti le 03/06/2013 (comme au 6 mars 2013)

Par conséquent, pour obtenir un nom de répertoire tel que 2013-03-06, codez ceci dans votre fichier de traitement par lots:

SET dirname="%date:~6,4%-%date:~0,2%-%date:~3,2%"
mkdir %dirname%
4
user2138753

Cela devrait fonctionner:

mkdir %date%

Si ce n'est pas le cas, essayez ceci:

setlocal enableextensions
mkdir %date%
3
Blorgbeard

Si vos paramètres régionaux ont le format de date "JJMMAAAA", vous devrez le définir comme suit:

set datestr=%date:~-4,4%%date:~3,2%%date:~-10,2%
mkdir %datestr%
2
Marco

Je suis assis exactement dans le même bateau que vous dès que je suis avant 10 h. Je ne peux pas utiliser le menu ci-dessous, j'ai réglé mon temps de 12 h à 24 h, j'ai changé hh/mm en hh/mm J'ai essayé la plupart des codes je pourrais trouver. ci-dessous aidera au moins un peu. Tweak et fixer :)

Ci-dessous peut aider aussi

set DD =% DATE: ~ 0,2%

définir MM =% DATE: ~ 3,2%

définir YY =% DATE: ~ 8,2%

définir AAAA =% DATE: ~ 6,4%

définir hh =% hh: = 0%

set mm =% TIME: ~ 3,2%

si "% heure: ~ 0,1%" == "" (set folderdate = 0% heure: ~ 1,1%) ELSE set folderdate =% heure: ~ 0,2%

mkdir folderdate =% date: ~ 6 %% date: ~ 3,2 %% date: ~ 0,2% _% folderdate %% heure: ~ 3,2%

copier\Makereport * .CSV\Makereport \% folderdate% \

cd% folderdate% REM - (7Zip dans c:\batch) Path = c:\batch

7z un Retail.Zip * .CSV -pRetailPassword

cD..

del * .csv

2
Bize32

Cela fonctionne pour moi, essayez:

ECHO %DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%
1
Natan Braslavski

c'est une solution plus simple.

@ECHO OFF
set name=%date%
echo %name%
mkdir %name% 

Vous aimerez ceci, changez-le pour qu'il puisse répondre à vos besoins.

mkdir today
Copy Desktop\test1\*.* today
setlocal enableextensions
set name=%DATE:/=_%
Rename "today" _OlddatabaseBackup_"%name%"
1
James Carroll

l'expression %date:~p,n% renvoie n nombre de caractères à partir de la position p dans la chaîne de date.

si ma chaîne de date système est Mon23/11/2015 

la commande % date: ~ 1,3% renvoie la valeur Lundi

la commande % date: ~ 10,4% renvoie la valeur 2015 

et en conjonction avec la commande md (ou mkdir) 

la commande md% date: ~ 10,4 %% date: ~ 7,2 %% date: ~ 4,2% crée un répertoire nommé 20151123 

de même si votre chaîne de date est dans le format Lundi, 23/Nov/2015 

la commande md% date: ~ 16,4 %% date: ~ 12,3 %% date: ~ 9,2% crée un répertoire nommé 2015Nov23 

Si vous renvoyez accidentellement des caractères de la chaîne de date qui ne sont pas autorisés dans les noms de dossier ou utilisez des valeurs non valides pour p et n, vous obtiendrez une erreur .

1
Leigh

Utilisez ce script batch créé par moi:

@echo off
title Folder Creator
color b
setlocal enabledelayedexpansion
echo Enter the folder name, you can use these codes:
echo /t - Time (eg. 16:29)
echo /d - Date (eg. 17-02-19)
echo /a - Day (eg. 17)
echo /m - Month (eg. 02)
echo /y - Year (eg. 19)
echo /f - Full Year (eg. 2019)
echo.
set /p foldername=Folder Name:
set foldername=%foldername:/t=!time:~0,5!%
set foldername=%foldername:/d=!date:~0,2!-!date:~3,2!-!date:~8,2!%
set foldername=%foldername:/a=!date:~0,2!%
set foldername=%foldername:/m=!date:~3,2!%
set foldername=%foldername:/y=!date:~8,2!%
set foldername=%foldername:/f=!date:~6,4!%
md %foldername%

Par exemple, si vous voulez créer un dossier nommé la date au format DD-MM-YY , vous devez taper "/ d" mais si vous voulez le faire dans le répertoire DD-MM- YYYY format vous tapez "/ a -/ m -/ f".

0
Hayz

J'avais besoin à la fois de la date et de l'heure et utilisé:

mkdir %date%-%time:~0,2%.%time:~3,2%.%time:~6,2%

Qui a créé un dossier qui ressemblait à: 2018-10-23-17.18.34

Le temps a dû être concaténé car il contenait :, ce qui n’est pas autorisé sous Windows. 

0
andre

https://stackoverflow.com/a/31789045/1010918 La réponse de/foxidrive m'a aidé à obtenir le dossier avec la date et l'heure que je voulais. Je voudrais partager cette méthode ici car cela a fonctionné très bien pour moi et je pense que cela pourrait aussi aider d'autres personnes, indépendamment de leur localisation.

rem The four lines below will give you reliable YY DD MM YYYY HH Min Sec MS variables in XP Pro and higher.

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" & set "MS=%dt:~15,3%"

 set "dirname=%YYYY%-%MM%-%DD% %HH%-%Min%-%Sec%"

 :: remove echo here if you like
 echo "dirName"="%dirName%"
0
lowtechsun

Merci pour l'info tout, très utile. J'avais besoin de quelque chose qui puisse créer un dossier "de sauvegarde" aussi souvent que chaque minute dans le même répertoire, ainsi que l'appeler plus tard dans le script. Voici ce que je suis venu avec: 

@ echo off

CD %userprofile%\desktop

SET Datefolder="%DATE:~4,2%-%DATE:~7,2%-%DATE:~12,2%_%time:~1,1%%time:~3,2%"

MD "%Datefolder%"

Cela me donne un dossier sur le bureau de l'utilisateur actuellement connecté, nommé: mm-jj-aa_hmm (heure minute minute), à ​​savoir: 07-28-15_719

0
pshopgeek