根据当前日期和时间创建文件夹的批处理文件

18
我们有一个简单的批处理文件,用于创建一个文件夹的备份并在末尾添加日期和时间。
我们使用这个方法进行增量备份,输出的文件夹名称类似于"data 28-04-13"。
我想在末尾添加时间,但是我的代码输出的时间格式为HH:MM,这样的格式对于文件夹名称来说是无效的,因为它包含了冒号(:)。
请有经验的人修改我的代码,删除冒号或者将其替换为点号。
谢谢。
@echo off & for /F "tokens=1-4 delims=/ " %%A in ('date/t') do (
set DateDay=%%A
set DateMonth=%%B
set DateYear=%%C
)

@echo off & for /F "tokens=1-4 delims=/ " %%D in ('time/t') do (
set DateTime=%%D
)

set CurrentDate=%DateDay%-%DateMonth%-%DateYear%-%DateTime%

md "F:\MobilePC\data %CurrentDate"

回答了我的问题

所以,对我来说,这是最简单的方法:

set CurrentDate=%DateDay%-%DateMonth%-%DateYear%-%time:~0,2%.%time:~3,2%

输出结果为"31-10-13-11.35"


使用默认的批处理变量 %date% %time% 来完成它? - Samuel Nicholson
正如您所看到的,%time%输出的时间格式为HH:MM,这对于文件夹名称来说是无效的,因为它包含了一个冒号。 - TheNineteenNineties
time变量中还包括需要考虑的AM中的空格。我在下面的建议中使用WMIC来解决XP Pro及更高版本的问题。 - foxidrive
问题和答案本身对我有效... - kplshrm7
设置文件夹=%date%-%time:0,2%-%time:3,2%-%time:6,2%-%time:9,2% 设置文件夹=%folder: =% rem 以防单个数字时间或月份出现空格,删除空格 - Immanuel
6个回答

25

这段代码的前四行将为您提供可靠的 XP Pro 及更高版本中的 YY DD MM YYYY HH Min Sec 变量。

内置 cmd 日期和时间变量是用户可配置的,因此对于任何通用批处理文件都不可靠。

@echo off
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 "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%"
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause

7
rem replace : with .
set myTime=%time::=.%

rem remove cents of second
set myTime=%myTime:~0,-3%

7
您可以通过以下方式设置当前日期和时间。 我每天在批处理文件中使用它。
%date:~10%%date:~4,2%%date:~7,2%%time:~0,2%%time:~3,2%

输出:

201509141639 ( 14th sept 2015 04:39 PM )

1
请问您能否详细阐述一下您的答案,并对您提供的解决方案进行更多描述? - abarisone
@abarisone: 在这个例子中,它将按照YYYYMMDDHHMM格式分离日期。 <br/> 我使用它来生成以下复制文件列表。 <br/> xcopy /e /y C:\Upload C:\Archive >> C:\Result%date:10%%date:4,2%%date:7,2%%time:0,2%%time:~3,2%.txt它会创建一个包含已复制文件名称的文本文件。 - Nirav Dave

2

这段代码将创建一个以当前日期和时间命名的文件夹,并将"D:\Tally Data"的全部内容复制到"08-10-2016 17 23"文件夹中。

它需要在计算机D盘上有一个名为"Tally Data"的文件夹。(将下面的代码复制到文本文档中并保存为DOS批处理文件)

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

set time=%TIME:~0,2%" "%TIME:~3,2%

mkdir C:\%date:/=%" "%time%\Backup

xcopy "D:\Tally Data" C:\%date:/=%" "%time%\Backup /E /S /Q /Y

1
请避免使用全大写字母来回答问题。 - Matt

1

谢谢,我正在尝试解决这个问题,我已经完成了以下步骤:set CurrentDateUnedited=%DateDay%-%DateMonth%-%DateYear%-%DateTime% set CurrentDate=%CurrentDateUnedited% echo.%CurrentDate% set str=%str::=% echo.%CurrentDate%但是因为它是一个冒号,我不确定如何将其解析到代码中? - TheNineteenNineties
我认为你需要在最后使用 echo %str% 而不是 echo %CurrentDate%。另外,正如 @SamN 所说,你可以使用内置的 %time% - Okkenator

0
 setlocal
   set "time=%time::=%"
   rem check that date has / delimeter if not replace it for valid
   md %date:/=%_%time:~0,-3%
 endlocal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接