web-dev-qa-db-fra.com

Création d'un dossier à l'aide d'un fichier bat

J'ai besoin d'écrire un fichier bat qui crée un nouveau dossier en utilisant la date et l'heure actuelles pour le nom du dossier. Je suis venu avec ce qui suit:

for /f "tokens=1-3 delims=:," %%i in ("%TIME%") do md %DATE%-%%i.%%j.%%k

Ce code a-t-il des défauts? Y a-t-il un moyen plus simple/plus naturel de le faire?

15
Yarik

Pour ce faire, vous pouvez utiliser une sous-chaîne et les variables intégrées% DATE% et% TIME%:

@echo OFF

:: Use date /t and time /t from the command line to get the format of your date and
:: time; change the substring below as needed.

:: This will create a timestamp like yyyy-mm-dd-hh-mm-ss.
set TIMESTAMP=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%-%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%

@echo TIMESTAMP=%TIMESTAMP%

:: Create a new directory
md "%1\%TIMESTAMP%"
23
Patrick Cuff

J'utilise cette batte

for /F "tokens=1-4 delims=. " %%i in ('date /t') do (
set Day=%%i
set Month=%%j
set Year=%%k
)

for /F "tokens=1-4 delims=: " %%i in ('time /t') do (
set Hour=%%i
set Minute=%%j
set Second=%%k
)


md %1\%Year%-%Month%-%Day%

J'espère que ça aide.

5
lopkiju

La raison pour laquelle un simple% time% ne fonctionne pas, c'est parce qu'elle est séparée par: ce qui n'est pas autorisé dans les scripts par lots. Mais celui-ci devrait bien fonctionner:

Cela fonctionne très bien pour moi.

Rem Get Day,Mth & Year from %Date%
set Day=%Date:~0,2%
set Mth=%Date:~3,2%
set Yr=%Date:~6,4%
REM Get Hour and Min from %Time%
set Hour=%Time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
set Min=%Time:~3,2%

mkdir %date%-%hour%.%min%
1
Rune Pedersen

Je ne pouvais pas obtenir beaucoup de ce qui précède au travail, utilisé avec succès la commande des affiches originales.

Voici ma version:

for/f "jetons = 1-3 delims =: /" %% i in ("% DATE%") définit DATESTAMP = %% i. %% j. %% k
@echo Directory sera créé avec le nom suivant:
@echo backup.% DATESTAMP%
md backup.% DATESTAMP%
@echo Directory made, passe maintenant à la copie du fichier ...
@echo s'il vous plaît assurez-vous que votre PC n'a pas d'e-mail ou aucun document ouvert .
pause
sauvegarde cd.% DATESTAMP%
md "Documents partagés"
xcopy "c:\documents et paramètres\tous les utilisateurs\documents\documents" "documents partagés"/E/C/I/H/Q
@echo dans Documents Complete.

etc :)

1
HaydnWVN

Voici ma solution (modifiée à partir de lopkiju). Il crée un dossier en utilisant un horodatage. Si un dossier portant ce nom existe déjà, ajoutez-y un entier pour le rendre unique. Placez ceci dans un fichier .bat et transmettez le chemin d'accès au dossier parent.
Testé sous Windows 7 Édition Familiale Premium x64.

REM Create a folder using the current date.  If such a folder already exists, append a number to make it unique.
@ECHO OFF
for /F "tokens=2-5 delims=/ " %%i in ('date /t') do (
set Day=%%j
set Month=%%i
set Year=%%k
)

set Path=%~1\%Year%-%Month%-%Day%
set /a inx=2

:LOOP
IF NOT EXIST "%Path%" GOTO CREATE
set Path=%~1\%Year%-%Month%-%Day% (%inx%)
set /a inx+=1
if %inx% gtr 9 goto :END REM Eh, giving up.
goto LOOP
:END

:CREATE
md "%Path%"
:END
0
mhenry1384

Vous pouvez tirer parti de GNU sh-utils en utilisant les spécificateurs de format de date.exe:

for /f "delims=" %%a in ('date.exe +%%Y-%%m-%%d.%%H-%%M') do @set dd=%%a
md %dd%

Cette solution est particulièrement importante pour ceux qui utilisent versions localisées de Windows.

La boucle for est exécutée une fois, mais cela est nécessaire car il n'existe pas de moyen plus simple d'affecter une variable à la valeur extraite de la sortie de la commande.

Utilisez date --help pour la liste complète des spécificateurs de format.

0
bytebuster

ça marche plutôt bien pour moi

dkdir foldername

cd foldername

dkdir %date% %time% 

cls
0
ryan vigus

n'avez-vous pas simplement essayé de créer un nouveau créateur de dossier en utilisant la date et l'heure enregistrées sous le nom new_folder_maker.bat avec ce code

:start
@echo off
md new_folder_%date%_%time%
exit
0
Alexander Angell