-1

I am trying to create a folder by date time in my batch file using following code

@echo off & for /F "tokens=1-4 delims=/ " %%A in ('date/t') do (
 set DateDay=%%A
 set DateMonth=%%B
 set Date=%%C
set DateYear=%%D
)
@echo off & for /F "tokens=1-4 delims=/ " %%D in ('time/t') do (
set DateTime=%%D
)
set CurrentDate=%Date%-%DateMonth%-%DateYear%-0%time:~0,2%.%time:~3,2%.%time:~6,2%
mkdir %CurrentDate%

using this I get folder name as 22-02-2021-010.01.37 But if time Hours is in 1 to 9 hr my folder is displayed as
22-02-2021-0 9.59.19 there is always a space in 0 and 9 and 1 to 9 hr is not displayed as 01,02,03 Hr

Answer Should Be:

22-02-2021-009.59.19
Aquaman
  • 43
  • 5

3 Answers3

1

The best and the correct method to get this is to use the date independently of the region day/month order, you can use "WMIC os GET LocalDateTime" as a source, since it's in ISO order:


@echo off
Title Get FileName With Date and Time
Call :GetFileNameWithDateTime MyCurrentDate
echo %MyCurrentDate%
MkDir %MyCurrentDate%
pause & exit
::----------------------------------------------------------------------------------
:GetFileNameWithDateTime <FileName>
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set "MyDate=%%x"
set "%1=%MyDate:~0,4%-%MyDate:~4,2%-%MyDate:~6,2%-%MyDate:~8,2%-%MyDate:~10,2%"
Exit /B
::----------------------------------------------------------------------------------
Hackoo
  • 18,337
  • 3
  • 40
  • 70
0
set "CurrentDate=%Date%-%DateMonth%-%DateYear%-0%time:~0,2%.%time:~3,2%.%time:~6,2%"
set "CurrentDate=%currentDate: =0%"
mkdir %CurrentDate%

substituting 0 for in currentdate

Tips : Use set "var1=data" for setting values - this avoids problems caused by trailing spaces. In comparisons, use if "thing1" == "thing2" ... to avoid problems caused by spaces in thing1/2.

Magoo
  • 77,302
  • 8
  • 62
  • 84
0

If you want something which will work on any modern system, and still output the directory name in your specific format/order, regardless of user or locale settings, then…

you could do it like this from a :

@For /F "Tokens=1-6 Delims=/: " %%G In ('%SystemRoot%\System32\Robocopy.exe \: . /NJH /L ^| %SystemRoot%\System32\find.exe " 123"') Do @MD "%%I-%%H-%%G-0%%J.%%K.%%L"

or directly from the Windows , cmd.exe:

For /F "Tokens=1-6 Delims=/: " %G In ('%SystemRoot%\System32\Robocopy.exe \: . /NJH /L ^| %SystemRoot%\System32\find.exe " 123"') Do @MD %I-%H-%G-0%J.%K.%L
Compo
  • 36,585
  • 5
  • 27
  • 39