Date 批次代码don';无法在新文件夹名称中提供正确的日期

Date 批次代码don';无法在新文件夹名称中提供正确的日期,date,batch-file,cmd,Date,Batch File,Cmd,我有一个脚本,可以将文件夹中的文件备份到以当前日期和时间命名的新文件夹中,但该日期在文件夹名称中显示不正确 代码如下: set hh=%time:~-11,2% set /a hh=%hh%+100 set hh=%hh:~1% Set dateseed=%date:~10,4%%date:~4,2%%date:~7,2%_%hh%%time:~3,2%%time:~6,2% if not exist "C:\Temp\backup\%dateseed%" mkdir "C:\Temp\bac

我有一个脚本,可以将文件夹中的文件备份到以当前日期和时间命名的新文件夹中,但该日期在文件夹名称中显示不正确

代码如下:

set hh=%time:~-11,2%
set /a hh=%hh%+100
set hh=%hh:~1%
Set dateseed=%date:~10,4%%date:~4,2%%date:~7,2%_%hh%%time:~3,2%%time:~6,2%

if not exist "C:\Temp\backup\%dateseed%" mkdir "C:\Temp\backup\%dateseed%"
cd "C:\Temp\backup\%dateseed%"
copy "C:\Temp\test2" .
新文件夹的名称应为:20140219_100105,但名称为“-0-1_100115


有什么问题?

用户可以更改
%date%
的格式,并且默认情况下会根据不同的区域设置进行更改,因此您不能在一系列机器上依赖它

另一个问题是使用
hh
进行计算,当第一个数字为零时,该数字将被视为八进制数,在这种情况下,当数字不是有效的八进制数时,计算将失败并显示错误消息,例如
09

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

@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

这对我来说很好。如果我将“dateseed=%date:~10,4%%date:~4,2%%date:~7,2%”更改为“dateseed=%date%”,echo%date%将提供正确的格式(2014-02-19)。我将获得文件名“2014-01-19100115”。这对我现在来说是可行的,但如果能用原始代码知道这个奇怪日期的原因,那就太好了。