[分享]利用批次檔備份資料(檔名是依據年月日時分秒)...





bobhsieh
2009-07-14, 04:22 PM
因為工作上需要幫使用者備份dbf/mdb ..,
只想要簡單利用批次檔加上winrar/7zip等可以使用指令(不用gui)自動備份,
參考網路各種資料,依據年月日時分秒作為檔名...
再加上小弟一點點的修改,
經測試可以符合需求,
如今分享出來給大家,


@echo off

cls
rem 取得日期、時間
rem setting environment variables with todoy's date values
for /f "tokens=1-4 delims=-/ " %%i in ('date /t') do (
set year=%%i
set month=%%j
set day=%%k
)

for /f "tokens=1-3 delims=:" %%i in ('time /t') do (
set hour=%%i
set minute=%%j
)

for /f "tokens=1 delims= " %%i in ("%hour%") do (
set hour=%%i
)

for /f "tokens=1-4 delims=: " %%a in ("%time%") do (
set h=%%a
set m=%%b
set s=%%c
)

rem 轉換成民國年
set /a yy=1911
set /a ww=%year%-%yy%

for /f "tokens=1-4 delims=. " %%x in ("%s%") do (
set ss=%%x
)

set dt=0%ww%%month%%day%-%h%.%m%.%ss%
title 資料備份中...0%dt%
rem title 資料備份中...0%ww%%month%%day%-%h%.%m%.%ss%

rem 使用7z加壓縮
"%programfiles%\7-zip\7z" a DB-"%dt%".zip C:\WinFnd\db >nul

if %errorlevel% == 0 goto yes > nul
if %errorlevel% == 1 goto 11 > nul

:yes
echo ==================================================================
echo 資料備份OK
echo ==================================================================
goto end

:11
echo ==================================================================
echo 資料備份有問題。
echo ==================================================================
goto end

:end
pause

@echo off




琥珀
2009-07-14, 07:17 PM
個人的偏見,電腦系統應儘量避免使用中華民國曆的基礎。並非崇洋媚外,而是比較「穩定」。現在還會堅持使用民國年,大都不是技術問題,是人為壓力問題。

使用西元年月日,一萬年之前,總共八位數,不足就補零;使用時分秒,24 小時制,總共六位數,不足就補零。

不同的系統版本和語言地區設定,有時用相同的指令,其結果是會不一樣的。像是 %date% 和 date /t 的內容,在 2000 上的顯示順序不同,在 XP 上則是相同。為了相容性,因此有些人會用 date /t 取代 %date%。

微軟有提供 now.exe 程式,可顯示年/月/日/星期/時/分/秒,在可使用的平台上,其顯示順序都是一致的,缺點當然就是要有這個程式才能完成批次檔的操作。

bx2aa
2009-07-14, 07:21 PM
簡化:
@echo off
cls
echo _________________________________________________________________________
echo ( )
echo ( Backup Script )
echo (_________________________________________________________________________)
set /a year=%date:~,4%-1911
set month=%date:~5,2%
set day=%date:~8,2%
set h=%time:~,2%
set m=%time:~3,2%
set s=%time:~6,2%

以下相同
set dt=0%year%%month%%day%-%h%.%m%.%s%
title 資料備份中...0%dt%
rem title 資料備份中...0%year%%month%%day%-%h%.%m%.%s%

rem 使用7z加壓縮
"%programfiles%\7-zip\7z" a DB-"%dt%".zip C:\WinFnd\db >nul

if %errorlevel% == 0 goto yes > nul
if %errorlevel% == 1 goto 11 > nul

:yes
echo ==================================================================
echo 資料備份OK
echo ==================================================================
goto end

:11
echo ==================================================================
echo 資料備份有問題。
echo ==================================================================
goto end

:end
pause

@echo off

bobhsieh
2009-07-14, 10:53 PM
二樓的朋友真的利害 ^^
又讓我學到一招...

一樓的朋友感謝您的建言 ^^
之所以會用民國年也是一些因素存在,
方便使用者再利用,
或許過些時後看看使用者使用情形再改過來吧~~~

goldie
2009-07-16, 12:55 PM
謝謝樓主與2樓
終於學會了如何在 Batch 檔裡取出日期時間了 ^^

琥珀
2009-07-16, 03:58 PM
自己想的範本。功能大同小異,基本上就是指令的排列組合。


@echo off

title Backing up files
cd /d c:\winfnd\db

ver| find "5.1" > nul
if %errorlevel%==0 goto XP
ver| find "5.0" > nul
if %errorlevel%==0 goto 2000
goto END

:XP
7z a "%~dp0DB-%date:~2,2%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%"| find "Everything is Ok"
goto END

:2000
7z a "%~dp0DB-%date:~6,2%%date:~9,2%%date:~12,2%-%time:~0,2%%time:~3,2%%time:~6,2%"| find "Everything is Ok"
goto END

:END
pause