5/25/2554

วิธีการเขียน Batch File เบื้องต้น #1: เริ่มสร้าง Batch File

หลาย วันมานี้ ผมมีความจำเป็นที่ต้องหาความรู้เกี่ยวกับ Batch File ซึ่งตัวผมเคยแต่ได้ยินมา ยังไม่เคยได้ลองด้วยตัวเองซักที ตอนนี่กำลังพยายามเรียนรู้กับมันอยู่ ด้วยความที่ต้องเริ่มต้นจาก 0 จึงต้องควานหาความรู้จากหลายๆเวป บางเวปก็งงกับภาษา ผมก้อเลยคิดว่าจะลองรวบรวมความรู้ที่ได้เป็นภาษาง่ายๆ ตามความเข้าใจของผม เพราะเป็นคนที่เริ่มจาก 0 ให้เพื่อนๆที่อาจต้องการความรู้ในเรื่องนี้ครับ

(ผมอาจจะยังไม่รู้ในหลายๆเรื่อง ถ้ามีผู้เชี่ยวชาญผ่านมาเห็นก้อรบกวนขอคำแนะนำด้วยคับผม o(#'U'#)o)

มาเริ่มกันเลยดีกว่าคับ

Batch File คืออะไร ?

Batch File เป็นชุดคำสั่งที่เขียนเพื่อสั่งให้ Computer ทำงานตามคำสั่งนั้นคับ โดยที่หน้าตาของไอ้เจ้าคำสั่งใน Batch File นั้น ก้อคือ คำสั่งทีี่่เราพิมพ์ใน Command Prompt นั่นเอง (Start > Run พิมพ์ cmd) เช่น

C:> echo hello [พิมพ์ แล้วกด Enter]
hello [Output ที่ได้]

C:> echo world [พิมพ์ แล้วกด Enter]
world [Output ที่ได้]

เมื่อเราพิมพ์ แล้วกด Enter สิ่งที่ได้คือ คำ่ว่า hello
คำสั่ง echo เป็นการสั่งให้ระบบมันสะท้อน ข้อความ ที่เราเขียนดังตัวอย่างข้างบน

ในการสร้าง Batch File เราก้อแค่เอาคำสั่งที่ใช้ใน Command Prompt เหล่านี้ไปเขียนต่อๆกัน ให้มันทำงาน
Concept ไม่ยากใช่ไหมคับ งั้นมาต่อกันเลยนะคับ

การสร้าง Batch File ทำอย่างไร ?

จากที่ผมอธิบายไป การสร้าง Batch File คือ การเอาชุดคำสั่งมาเขียนต่อๆกัน ที่นี้เราจะสร้าง Batch File ขั้นแรกเราก้อต้องหาที่เขียนก่อน ซึ่งก้อมีหลายตัวที่เราสามารถใช้ได้ ในที่นี่เราจะใช้ตัว notepad ในการเขียนนะคับ

หลังจากเปิดขึ้นมาแล้วเป็นหน้ากระดาษเปล่า ลองพิมพ์ชุดคำสั่งตามนี้นะคับ

echo hello
echo world

แล้ว ก้อทำการ Save คับ !!! แต่ การ Save เราจำเป็นต้องกำหนดนามสกุลเป็น Batch File เองคับ โดยเติม .bat ต่อท้ายชื่อ File ที่เราต้องการ Save (เพื่อความง่ายในการอธิบาย ผมจะขอทำการ Save ไว้ที่ Drive C นะคับ)



มาถึงตรงนี้ เราก้อได้ Batch File มาแล้วคับ เราลองมา Run ดูนะคับ
ให้เปิด Command Prompt ขึ้นมาแล้ว พิมพ์

cd \

เพื่อเปลี่ยน Directory ไปที่ Root ซึ่งในที่นี่ คือ Drive C (cd คือ Change Directory ครับ ส่วน \ เป็นสัญลักษณ์ที่แทน Root ครับ)
เราจะเห็น Prompt เป็น

C:\>

ให้เราพิมพ์ชื่อ File ที่เราสร้างไว้คับ

C:\> TEST.bat

ผลลัพธ์ที่ได้จะเป็น

C:\>echo hello
hello

C:\>echo world
world

จะเห็นได้ว่า ระบบจะทำงานตามคำสั่งที่เราเขียน เหมือนกับเราเป็นคนพิมพ์เองเลยทีเดียว

แต่ คราวนี้เวลาเอาไปใช้ เราอาจไม่ต้องการให้คนอื่นเห็นคำสั่งที่เราเขียน เราก้อแค่ใช้คำสั่งซ่อนสิ่งที่เราเขียนไว้เท่านั้นเอง นั่นคือ

echo off

งั้นมาลองกันคับ ให้ไปที่ File TEST.bat ของเรา แล้วกด Click ขวา เลือก Edit จะเห็นเป็น notepad ขึ้นมาคับ



ให้เพิ่มคำสั่ง echo off ที่บรรทัดแรกสุด

echo off
echo hello
echo world

แล้วทำการ Save คับ เราลองมา Run ดูใหม่นะคับ (วิธีตามวิธีข้างต้นเลยคับ) ผลที่ได้จะเป็น

C:\>echo off
hello
world

จะ เห็นว่ามีการพิมพ์คำสั่ง echo off เพื่อทำการซ่อนคำสั่งของเราแล้ว คำสั่งที่หลังจากนี้ก้อจะไม่แสดงคำสั่งของเราแล้วคับ o(#^u^#)o

!!! แต่ถ้าเราอยากให้ไม่แสดงคำสั่ง echo off ด้วยล่ะ จะได้ไหม
!!! ได้คับ เราก้อแค่เติม @ ข้างหน้า echo off เท่านั้นเองคับ เราลองไปเพิ่มใน notepad นะคับ ก้อจะได้เป็น

@echo off
echo hello
echo world

ทำการ Save แล้วก้อ Run เลยคับ GO GO GO !!!
จะเห็นว่าผลที่ได้จะเหลือแค่

hello
world

เพราะว่าเครื่องหมาย @ เป็นการบอกว่าให้ใช้คำสั่งนั้นกัับตัวมันด้วยคับ เพราะฉะนั้นตัว echo off ก้อเลยถูกซ่อนไปด้วย

เป็นยังไงบ้างคับ หวังว่าผู้ที่ (หลงเข้ามา) อ่านคงจะได้ความรู้เรื่อง Batch File มากขึ้นนะคับ
ผมก้อยังเป็นมือใหม่เหมือนกัน เรามาหาความรู้แล้วก้อโตไปพร้อมๆกันนะคับผม
ลองเขียนดูแล้วครับ
@echo off
XCOPY C:\1234 D:\5678 /S /E

พอรันไฟล์ก้อขึ้นหน้าจอ
Does D:\5678 specify a file name
or directory name on the target
(F = file, D = directory)?

ถ้าใส่ D Enter ก้อจะได้ตามต้องการ  แต่สิ่งที่อยากได้เพิ่มเติมและหาไม่เจอคือ
1. อันดับแรกไม่อยากให้มันขึ้นกรอบเพื่อที่จะต้องตอบเลย (D Enter)
2. อยากให้มันสร้างโฟล์เดอร์วันที่เองแทนโฟล์เดอร์ 5678 ได้ไหมครับ  แล้ว ถ้ามีข้อความเข้าไปด้วยจะยากเกินไปไหม
3. อยากให้มัน run auto ตอนไม่มีคนใช้แล้วเช่น ทุก ๆ วันตอน 21.00 ครับ จะทำได้ไหม


ตามนี้นะครับ ท่าน


โค๊ด:
@echo off

:: variables
set data=C:\data
set drive=E:\backup
set folder=%Date:~-7,2%_%Date:~-10,2%_%Date:~-4,4%
set backupcmd=xcopy /s /c /d /e /h /i /r /k /y

echo ### Backing up directory...
%backupcmd% "%data%" "%drive%\%folder%"

echo Backup Complete!


ตามคำสั่ง ด้านบน มันจะ ทำการ Copy Files จาก Folder ที่ C:\data ไปไว้ที่ E:\backup\วันที่_เดือน_ปี ครับ

หากจะเอาไปใช้จริงๆก็ ทำการแก้ ตัวแปล ต้นทาง set data=C:\data    set drive=E:\backup ปายทาง ให้ตรงกับที่อยู่ Folder ของท่านก่อนนะครับ

และ หาจะ ให้มันรันเองทุกๆวัน เวลา 21.00 ก็ให้ save เป็น bat ตัวอย่างนี้ ผมใช้ชื่อ backup.bat แล้วไปเพี่มให้มันรันไฟลนี้ ที่

Start > Control Panel >   scheduled task




แล้ว Add



เลือกหาไฟล backup.bat



ใช่ชื่อให้ มัน ว่า Back up  และ เลือกเป็นแบบ daily




เลือกเวลานะครับ



ใส่ password ของ user ของท่าน ครับ หากไม่มีก็ไม่ใส่ครับ



แล้วทดสอบ กดที่ RUN




จบครับ

ขอบคุญ รูปจาก
http://teamtutorials.com/windows-tutorials/create-a-windows-daily-backup-script


ส่วน Script เอามาจากหลายๆ ที่ ปะปนกันครับ
โดยแนวทางหลักมาจากเวปนี้ครับ
http://www.speedguide.net/read_articles.php?id=1547

3 ความคิดเห็น:

  1. ไม่ระบุชื่อ1 ตุลาคม 2554 เวลา 16:08

    thank u

    ตอบลบ
  2. โอ้ ขอบคุณครับ เจ๋งดี

    ตอบลบ
  3. ขอโทษนะครับคือผมอยากสร้าง bat file ให้สามารถรันตัวไฟล์ .ocx ที่มีอยู่ และแตกไฟล์ลงใน folder นั้นได้หรือเปล่าครับและต้องใช้คำสั่งไหนครับ เท่าที่ผมลองทำดูได้แบบนี้ครับไม่รู้ว่าจะถูกหรือเปล่าช่วยแนะนำด้วยครับ

    @echo off
    cls
    echo ran
    comct232.ocx
    COMCT332.OCX
    COMCTL32.OCX
    COMDLG32.OCX
    MCI32.OCX
    MSADODC.OCX
    MSCHART.OCX
    MSCHRT20.OCX
    MSCOMCT2.OCX
    MSCOMCTL.OCX
    MSCOMM32.OCX
    MSDATGRD.OCX
    MSDATLST.OCX
    MSFLXGRD.OCX
    MSHFLXGD.OCX
    MSINET.OCX
    MSMASK32.OCX
    MSRDC20.OCX
    MSSCRIPT.OCX
    MSWINSCK.OCX
    PICCLP32.OCX
    RICHTX32.OCX
    TABCTL32.OCX
    THREED32.OCX
    VB5DB.DLL
    VSPRINT7.ocx
    vsprint8.ocx
    WBCLSDSR.OCX
    exit

    ตอบลบ