Home > Windows Zone > การทำ Backup File server แบบง่ายๆ โดยใช้ Batch File

การทำ Backup File server แบบง่ายๆ โดยใช้ Batch File

เริ่มต้นที่ปัญหา บริษัทผมมี เครื่อง File server ตัวนึง เอาไว้เป็น Drive กลางให้ฝ่ายต่างๆ ในบริษัท
จำเป็นต้องทำการ Backup Drive ที่แชร์ให้ฝ่ายต่างๆในบริษัทใช้ โดยที่จะต้อง ทำการ Backup ทุกวัน และบริษัทไม่ค่อยให้งบประมาณเท่าไหร่ในเรื่องนี้ ก็เลยต้องทำแบบ เบสิกสุดๆ โดยการ ใช้ backup window เนี่ยแหละทำ
‘ =================================
การทำงานของระบบ Backup ของผมนี้ คือ 1 ที่เครื่อง file server ให้ทำการ ตั้ง schedule Backup ของ window ในแต่ละ folder ออกมาเป็น ไฟล์ .bkf เช่น

ใน Drive D ของเครื่อง File server มี folder ต่างๆดังนี้
E:\-Account
      - Marketing
      - HR
      - Sale
      - IT

วิธีการของผมก็คือจะสร้าง Folder อีกตัวนึง ชื่อ DailyBackup ขึ้นมา ใน DailyBackup นี้ก็จะมี Folder ตามฝ่ายต่างๆ เพื่อที่ ผมจะให้ backup window นั้นสร้างไฟล์ bkf ไว้ใน folder เหล่านั้นนะครับ
E:\DailyBackup
            |- Account
                   |-account.bkf
            |- Marketing
                   |-Marketing.bkf
            |- HR
                   |-HR.bkf
            |- Sale
                   |-Sale.bkf
            |- IT
                   |-IT.bkf
หมายเหตุ ไฟล์ *.bkf จะเป็นไฟล์ใหม่ในแต่ละวัน ส่วนวิธีการ backup หาอ่านได้ที่นี่ http://www.justusers.net/articles/ossystem/xpbackup/backup.htm
‘ =================================
เมื่อตั้งข้อมูลเบื้องต้นเสร็จเรียบร้อยแล้วทีนี้ก็เป็น กระบวนการ จับ zip ไฟล์ *.bkf เพื่อบีบอัดข้อมูล ได้มากมายครับ
ผมจึงได้ทำการเขียน batch file ขึ้นมาตัวนึง โคดดังนี้ครับ
‘ ========= ScriptDaily.bat =========
@echo off
for /f “tokens=1-4 delims=/ ” %%i in (”%date%”) do (
set dow=%%i
set month=%%j
set day=%%k
set year=%%l
)
SET d=%year%%month%%day%
SET Source=E:\
SET Des=E:\DailyBackup\
REM ใส่ Log ซะหน่อยครับ เพื่อดูผลของการกระทำ สร้าง folder !LogBackup ขึ้นมา เพื่อเก็บไฟล์ Log
SET LOGPATH=E:\!LogBackup
echo Start Schedule Command Rar File backup as of %d% > %LOGPATH%\B_%d%.txt
echo ======================================================== >> %LOGPATH%\B_%d%.txt

for %%i in (Account Marketing HR Sale IT) DO (
   call commandRar.bat %Source%\%%i\%%i.bkf %Des%\%%i\%d%.rar
)
echo ===================================================>> %LOGPATH%\B_%d%.txt
echo ScriptDaily Backup Success!! at %date% %time% >> %LOGPATH%\B_%d%.txt
exit
‘ ======== จบ ScriptDaily.bat ============

จากโคดจะเห็นว่า มีการ วน loop ตาม folder ต่างๆ ที่กำหนดไว้ใน for
และ มีการเรียกใช้ batch อีกตัวเพื่อทำการ zip ในที่นี้ผมใช้ winrar เนื่องจาก สามารถ zip ได้ในขนาดใหญ่ๆได้ และบีบอัดได้ดีกว่า

‘ ======== commandRar.bat =============
@echo off

REM WinRAR - - <@listfiles…>
REM set path WinRar ใน environment ของ window ก่อน
set path=”C:\Program Files\WinRAR\”;%path%

         WinRAR a -r %2 %1
echo commandRar %1
echo in to
echo %2 Success!!
echo ========================================================
REM when zip backup file finish. and then delete original file backup
del %1
‘ ======== จบ commandRar.bat =============

เสร็จสิ้นเรียบร้อยแล้ว
หมายเหตุสำหรับคนไม่ชำนาญ
- การเขียน Log File ใน batch file ทำได้ง่ายโดยการ ใช้คำสั่ง echo ข้อมูลออกมาแล้ว จะเอาไปเก็บในไฟล์ไหน ก็เพียงแค่ใช้เครื่องหมาย > ชื่อไฟล์ ดังเช่น
echo Test Create Logfile > C:\testLog.txtก็จะเป็นการสร้าง text file ชื่อ testLog.txt ในไดร์ C ครับ ซึ่งมีข้อความว่า Test Create Logfile
หากต้องการ สร้าง ข้อความต่อ ก็เพียงแค่ ใส่เครื่อง > เป็น 2 ตัวนะครับเช่น
echo Test Create Logfile Line2 >> C:\testLog.txtหลังจากบรรทัดนี้ ไฟล์ testLog.txt จะมี 2 บรรทัด บรรทัดที่ 2 จะชื่อ Test Create Logfile Line2

- การเรียกใช้งาน BatchFile อีกตัว ทำการเรียกได้โดยใช้คำสั่ง Call ที่อยู่ batchfile
   เช่น call commandRar.bat

- การ ส่ง parameter ให้ BatchFile อีกตัวนึง ทำได้โดย การใส่ข้อมูลตามหลัง BatchFile โดยการเว้นวรรค 1 ครั้ง และ ใส่ parameter ตัวที่ 2 ต่อไปได้โดยใช้ เว้นวรรค เป็นตัวคั่นระหว่าง parameter ครับ
   call commandRar.bat parameter1 parameter2 parameter3
และในไฟล์ commandRar ที่มีการอ้างถึง เราสามารถ อ้างถึง parameter แต่ละตัวได้โดย ใช้ % ตามด้วย parameter ครับ จาก บรรทัดด้านบนนี้ โคดใน commandRar.bat เราสามารถอ้างถึง parameter ต่างๆได้โดย
echo %1    <— จะได้ค่า parameter1
echo %2   <— จะได้ค่า parameter2
echo %3  <— จะได้ค่า parameter3

ก็เป็นอันจบเบื้องต้นนะครับ

admin Windows Zone

  1. September 15th, 2009 at 13:14 | #1

    Good post! I plan to move into this stuff after I’m done with school, as most of it is time consuming. It’s a great post to reference back to. My blog needs more time to gain in popularity anyway.

  2. ตั้ม
    September 16th, 2009 at 16:02 | #2

    D:\Backup>dir
    Volume in drive D is DATA
    Volume Serial Number is 28B2-E783

    Directory of D:\Backup

    09/16/2009 03:38 PM .
    09/16/2009 03:38 PM ..
    09/16/2009 04:00 PM 360 commandRar.bat
    09/16/2009 03:06 PM 8,537,088 FileMakerPro.bkf
    09/16/2009 04:00 PM 751 ScriptDaily.bat
    3 File(s) 8,538,199 bytes
    2 Dir(s) 65,974,362,112 bytes free

    D:\Backup>ScriptDaily.bat
    1-4 was unexpected at this time.

    D:\Backup>

    ผมลองเอาไปใช้กับ xp เกิดปัญหาแบบนี้ครับ รบกวนแนะนำหน่อย

  3. September 17th, 2009 at 12:15 | #3

    ผมไม่เห็นว่า คุณปรับ โคดไปอย่างไรน่ะครับ รบกวน โพส โคด ที่แก้ไขใน ไฟล์ scriptdaily.bat ในส่วน loop ด้วยนะครับ

  4. babyB
    September 17th, 2009 at 16:27 | #4

    รบกวนถามนอกเรื่องนิดหนึ่งครับ batch นี่มันวนลูปไงครับ
    คืออยากให้มัน วนลูปออกมาที่ output.txt
    แบบเรียง
    hello 1
    hello 2
    ไปเรื่อยๆจนถึงที่เรากำหนดไว้อ่ะครับ ช่วยสอนหน่อยครับขอบคุณครับ

  5. nuijang
    September 17th, 2009 at 21:15 | #5

    เขียน Loop ทำได้หลายวิธี สำหรับในตัวอย่างนี้ เป็นการ Loop โดยที่เรากำหนด จำนวนรอบที่แน่นอน เนื่องจาก ผมต้องการ loop ในโฟรเดอร์ที่กำหนดไว้เท่านั้น จึงใช้คำสั่ง for ตามรูปแบบนี้นะครับ

    for ตัวแปร in (ข้อมูล1 ข้อมูล2 ข้อมูล3 …) DO {
    คำสั่ง
    }

    ตัวแปร ที่รับ จะใช้รับข้อมูล จะมีรูปแบบ %%ชื่อตัวแปร
    ส่วน ข้อมูล1 ใน () จะเป็น ข้อมูลที่เราจะกำหนด ให้ไปกี่ Loop

    ลองดูตัวอย่าง ข้างล่างนะครับ

    REM ใช้คำสั่ง echo ใส่ข้อความ แล้ว เครื่อง > เพื่อเขียนไปยัง Log ไฟล์ กำหนด path และชื่อไฟล์ ตามคำสั่งด้านล่าง
    REM เราจะใช้ echo ข้อมูล และใช้เครื่องหมาย >> ไปยัง path ไฟล์ เพื่อ ใส่บรรทัดต่อไป

    echo Start Write Batch File > C:\output.txt

    for %%i in (hello1 hello2 hello3) DO (
    echo %%i >> C:\output.txt
    )

  6. nuijang
    September 17th, 2009 at 21:25 | #6

    ถ้ามี จำนวนรอบ ที่เป็นตัวเลข เราสามารถใส่ loop กำหนดจำนวนรอบเองได้ ดังนี้

    echo Start Write Batch File > C:\output2.txt
    for /l %%i in (1 1 10) do (
    echo HELLO%%i >> C:\output2.txt
    )

    ใน in (1 1 10) ค่า 10 คือรอบ ที่จะให้วน จากตัวอย่างนี้ ใน loop for จะวน ทั้งหมด 10 รอบ
    ผลลัพธ์ที่ได้ใน ไฟล์ output2.txt ก็คือ
    Start Write Batch File
    HELLO1
    HELLO2
    HELLO3
    HELLO4
    HELLO5
    HELLO6
    HELLO7
    HELLO8
    HELLO9
    HELLO10

    ในบทความนี้ เป็น เพียง เบื้องต้นสำหรับ ใช้งาน backup เท่านั้นนะครับ ถ้าอยาก เขียน batch ให้ลึกจิงๆ ก็ต้องหาหนังสืออ่าน เพิ่มเติมนะครับผม ขอให้โชคดีครับ

  7. ตั้ม
    September 19th, 2009 at 09:02 | #7

    สวัสดีครับ ขอโทษที่มาช้าครับ หุหุ
    ผมได้แก้ไขบางส่วนเช่น ลบการวนลูปออกเพราะว่าผมมีแค่ไฟล์เดียว แต่จุดประสงค์ของการทำเป็นแบบเดียวกับเจ้าของกระทู้ครับ

    ด้านล่างเป็น code ที่ผมใ้ช้อยู่และใช้ได้จริง สาเหตุที่ต้องเปลี่ยนบางส่วนเพราะว่า code ที่ให้ไว้เมื่อนำไปรัน มันจะ error ในส่วนของ for loop ครับ เลยไปหาวิธีอื่นๆมาใช้ ตอนนี้ใช้ได้ดีแล้วครับ ยังไงขอบคุณเจ้าของกระทู้มากๆครับ เป็นแนวทางให้ได้ศึกษา

    แต่ไม่แน่ใจว่าผม สามารถเรียกโปรแกรม backup ของ windows xp ผ่านทาง batch ได้เลยไหม เพราะว่าตอนนี้ผมต้องเซ็ต 2 ที่ละครับ

    @For /F “tokens=2,3,4 delims=/ ” %%A in (’Date /t’) do @(
    Set Month=%%A
    Set Day=%%B
    Set Year=%%C
    )

    SET d=%Year%%Month%%Day%
    SET Source=D:\Backup\
    SET Des=D:\DailyBackup\
    SET Log=D:\DailyBackup\log\
    REM ใส่ Log ซะหน่อยครับ เพื่อดูผลของการกระทำ สร้าง folder !LogBackup ขึ้นมา เพื่อเก็บไฟล์ Log
    echo Start Schedule Command Rar File backup as of %d% > %Log%\log_%d%.txt
    echo ===================================================>> %Log%\log_%d%.txt

    set path=”C:\Program Files\WinRAR\”;%path%
    WinRAR a -r %Des%FileMakerPro%d%.rar %Source%*.bkf

    echo ===================================================>> %Log%\log_%d%.txt
    echo ScriptDaily Backup Success!! at %date% %time% with file name FileMakerPro%d%.rar >> %Log%\log_%d%.txt
    exit

  8. babyB
    September 20th, 2009 at 22:18 | #8

    ขอบคุณมากเลยครับ พอดีมีปัญหาให้ต้องใช้ batch แก้อ่ะครับ กุมขมับมาสองวันแล้ว ขอบคุณทุกท่านครับที่ช่วยชี้แจงครับ

  9. babyB
    September 20th, 2009 at 22:48 | #9

    รบกวนอีก นิดครับ ถ้า for loop หรือ while นี่ จำนวนรอบนี่ เรารับค่าจาก key board ได้ไหมครับ
    แบบกำหนดตัวแปรอ่ะครับ

  10. babyB
    September 20th, 2009 at 23:22 | #10

    ได้แล้วครับ

  11. October 23rd, 2009 at 15:52 | #11

    Your article is nice.Thanks for your sharing,it helps me more.I will look forward to your more wonderfull articles.Have a good time.

  12. October 25th, 2009 at 15:44 | #12

    Thank you very much. I am wonderring if i can share your article in the bookmarks of society,
    Then more friends can talk about this problem.

  13. October 27th, 2009 at 12:47 | #13

    จะลองทำตามที่คุณแนะนำจ๊ะ

  14. momo
    November 6th, 2009 at 14:44 | #14

    รบกวนช่วยบอกวิธี backup file ด้วยคำสั่ง dos หน่อยคะ แบบมีเงื่อนไขด้วย หากท่านไหนทราบรบกวนแอดเมลล์มาคุยหน่อยนะคะ momo1610naka@hotmail.com ขอบคุณมากคะ

  1. No trackbacks yet.