2014-02-19 31 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 
相關問題