2014-02-19 27 views
0

我有一个脚本,从文件夹备份文件到以当前日期和时间命名的新文件夹,但日期在文件夹名称中显示不正确。批处理代码不会给新文件夹名称中的正确日期

下面是代码:

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

有什么不对?

+0

对我来说工作正常。你为'echo%date%'得到什么? –

+0

echo%date%给出正确的格式(2014-02-19) – Tomas

+0

如果我将“dateseed =%date:〜10,4 %% date:〜4,2 %% date:〜7,2%”更改为: “dateseed =%date%”我得到文件名“2014-01-19_100115”。 这适用于我现在,但它会很高兴知道奇怪的日期与原始代码的共振。 – Tomas

回答

1

%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 
相关问题