วันอาทิตย์ที่ 7 เมษายน พ.ศ. 2556

ปูพื้นฐานก่อนเขียน Batch Files

ใช้คอมมาถึงยุคปัจจุบัน...ก็ร่วม 10 ปี... "Disk Operating System หรือ DOS" มันได้สูญพันธ์ไปแล้วจริงหรือ คำตอบออกมาจากหัว "เสียงดังมาก" ว่า "ไม่ใช่!" แต่ในความเป็นจริงของโลกยุคปัจจุบัน "ใช่แล้วปู่!" สังเกตได้จากแผ่น "ดิสก์เก็ต 5 นิ้ว มันตายไปกับไดโนเสาร์แล้ว พร้อมๆ กับแผ่น 3 นิ้ว มันก็จะสูญพันธ์ไปพร้อมช้างแมมมอส และที่กำลังจะสูญพันธ์ตามไปคือแผ่น CD-ROM อีกไม่นาน(เพราะไดร์ฟมันไม่มีแล้ว)" และเราใช้อะไรบูตเครื่องแทน DOS กัน คำตอบคือ ถ้าระบบปฏิบัติการวินโดวส์เอง คือ "แกนวินโดวส์; Kernal" (ยังไม่ขอพูดถึงระบบมัน)
ตัวของวินโดวส์ตั้งแต่ยุค 98 จนถึง Me เวลาซ่อมเครื่องยังต้องอาศัยแผ่น StartUp ซึ่งนั้นแหละคือระบบปฏิบัติการ DOS ย่อส่วน (แค่นั้นมันก็รวมคำสั่ง DOS ไว้เกือบครึ่ง) จนมาถึง XP ระบบการสร้าง Start Up Disk ได้หายไปพร้อมกับระบบที่ไม่ต้องการ Command.com, IO.SYS, MS-DOS.SYS อีกต่อไป (และทำไมมันยังอยู่ในไดร์ฟระบบเช่น C:\>) มันเหลือแค่มีไว้ประดับบารมีของ XP ครับ... บูตจริงๆ มันบูตไม่ขึ้น... เพราะระบบของ XP ที่ Root Folder มีแฟ้มหลักๆ คือ
boot.ini, NTDETECT.COM, ntldr ซึ่งแฟ้มเหล่านี้... XP จะขาดไม่ได้...มีผลทำให้เครื่องบูตติด Error ได้ครับ...
มาถึงระบบ Windows 7 เองการบูตเองก็ไม่ได้พึ่งพาไอ้แฟ้มที่กล่าวมาข้างต้นเช่นกัน...มันโยนภาระให้โฟลเดอร์ BootMgr, และ Restore พาร์ทิชั่นจัดการ...ตัวระบบลึกๆ ผู้เขียนยังทราบรายละเอียดมากนัก แต่ที่แน่แท้คือ "ดอส มันสูญพันธ์ไปแล้ว" ยังคงเหลือไว้ใน "แผ่นอรรถประโยนช์" อย่าง "Hiren Boot" ให้ทดลองเล่นกันได้ถึง แผ่นรุ่นที่ 11 ลงมา
ยุคที่การซ่อมเครื่องหรือลงระบบปฏิบัติการผ่าน Windows PE หรือ Mini XP หรือ Mini Windows 7 ทำไมต้องลงโปรแกรมผ่านระบบพวกนี้...คำตอบแบบกระแทกใจอย่างแรงคือ "มันไม่ต้องถามหาไดร์ฟเวอร์หรือโปรแกรมควบคุมอุปกรณ์ภายในคอมพิวเตอร์...ที่ไม่รู้จะมีตับไตใส้พุงอะไร ดอสมันถามหมด...แถมหาไม่เจอ...ระบบพวกนี้เขาจัดการไว้หมดแล้ว" เป็นคำตอบเดียวที่รู้อยู่ว่า...ปู่ก็ไม่ชิน แต่ปู่ต้องเต๊ะปีบดังๆ ด้วยการ Ghost ผ่านระบบพวกนี้...หรือ Restore Windows 7 หรือ Windows 8 ด้วยระบบพวกนี้...นะปู่...สก๊อยขอบอก...เร็วด้วย...แรงด้วย...เหมือนพี่แว้น...
อาว...ทีนี้...โปรแกรมยุค DOS และโปรแกรมทางธุรกิจที่ผมซื้อลิขสิทธ์บน DOS เมื่อ 10 ปีที่แล้ว...ตัวละหลายๆ พันละ...จะทำยังไง...ผมต้องลงทุนอีกหรือ...คำตอบที่ดังในหัวอย่างแรกเหมือนใครสาปแช่งคือ "ใช่!" แต่ยังมีเสียงสวรรค์ของนางฟ้าหน้าจอคอมพิวเตอร์พูดว่า ลองใช้ DOSBox ดูซิ" ปู่ยิ้มแก้มปลิ...เหอๆ มีสวรรค์ชั้นเจ็ดมีจริงด้วย...แต่ผมตอบนางฟ้าไปว่า "นางฟ้า...มันไม่ฟรี" นางฟ้าตอบอย่างอายและมองค้อนทีนึงพร้อมพูดว่า "จะขึ้นสวรรค์...ก็ต้องเสียตังค์ซิ...จริงไหม?"
มรดก...อย่างเดียวที่ DOS ยังเหลือมาให้คือ Batch files
แบตช์ไฟล์คืออะไร...ผู้เขียนจะค่อยๆ ทยอยสอน...ให้เพื่อความเป็น "ปู่โสมเฝ้าแบตช์ไฟล์" ตัวจริง...


Batch File คืออะไร
แบตช์ไฟล์คือ คำสั่งของระบบเทียบเท่ากับภาษาคอมพิวเตอร์อีกภาษาหนึ่ง...ซึ่งมีมาตั้งแต่ยุค DOS ซึ่งในปัจจุบันการมันทำงานผ่าน CMD.EXE ในรูปแบบ "เพนเท็กซ์" ผ่าน "สคริปคำสั่ง"
แบตช์ไฟล์ประกอบด้วยนามสกุล ".CMD; ComManD และ .BAT; BATch" เขียนด้วยโปรแกรมแก้ไขข้อความ หรือ โปรแกรมเวิร์ดโปรเซสซิ่งทุกรูปแบบแต่ต้องบันทึกให้อยู่ในรูปแบบของ "Unicode; ยูนิโค้ด" แบบ "ASCII Text; แอสกี้เท็กซ์" ถ้าบันทึกอยู่ในยูนิโค้ดอื่นหรือรูปแบบอื่น อาจมีปัญหาตอนเรียกใช้คำสั่งซึ่ง CMD.EXE หรือ COMMAND.COM ไม่เข้าใจรูปแบบข้อมูล
การทดสอบแบตช์ไฟล์ให้ไปที่ Start...Run...พิมพ์ CMD และ Enter ส่วนวินโดวส์เซเว่นให้พิมพ์ที่ ช่อง Search ว่า CMD และ Enter ในคำสั่ง DOS ซึ่งเป็นคำสั่งของตัวแบตช์ไฟล์เองนั้นมีอยู่ 2 ประเภทคือ 1. คำสั่งภายใน (Internal Command) 2. คำสั่งภายนอก (External Command) ให้ลองเข้าสู่ CMD และพิมพ์ตามนี้

C:\Documents and Settings\Administrator>set
ALLUSERSPROFILE=C:\Documents and Settings\All Users
.
.
.
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem ; นี้คือที่อยู่ของคำสั่งภายนอก
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH ; และนี้คือนามสกุลของคำสั่งภายนอก
.
.
.
windir=C:\WINDOWS

ตัวอย่าง
ASSOC, AT, ATTRIB, BREAK, CACLS, CALL, CD, CHCP, CHDIR, CHKDSK, CHKNTFS, CLS, CMD, COLOR, COMP, COMPACT, CONVERT, COPY, DATE, DEL, DIR, DISKCOMP, DISKCOPY, DOSKEY, ECHO, ENDLOCAL, ERASE, EXIT, FC, FIND, FINDSTR, FOR, FORMAT, FTYPE, GOTO, GRAFTABL, IF, LABEL, MD, MKDIR, MODE, MORE, MOVE, PATH, PAUSE, POPD, PRINT, PROMPT, PUSHD, RD, RECOVER, REM, REN, RENAME, REPLACE, RMDIR, SET, SETLOCAL, SHIFT, SORT, START, SUBST, TIME, TITLE,  TREE, TYPE, VER, VERIFY, VOL, XCOPY

ด้านบนคือคำสั่งในที่ใช้งานในแบตช์ไฟล์ทั่วๆ ไป "จะเรียกว่าคำสั่งภายในก็ได้" แต่คำสั่งเหล่านี้ในวินโดวส์บางรุ่นรวมไปถึง DOS เองจะถือเป็นคำสั่งภายนอกเพราะ "มันมีนามสกุล .EXE" เก็บไว้ที่พาทระบบเช่น DOS จะเก็บที่ \DOS ส่วน วินโดวส์เอกซ์พี จะเก็บที่ %Windir%\System32 จึงไม่อาจนิยามออกมาเป็นเอกเทศได้ ในอนาคตคำสั่งเหล่านี้...อาจถูกเก็บรวบร่วมไว้ภายใน CMD.EXE ทั้งหมด และอาจจะมีบางตัวที่ไม่จำเป็นต้องใช้งานถูกตัดออกไปเช่นกัน

การแสดงผลภาษาไทย
การแสดงผลภาษาไทยนั้น...ในตัว Console เองทำได้ไม่สะดวกนัก...เพราะตัวระบบของ DOS บนระบบ (GUI; Graphic User Interface) ไม่นิยมที่จะใช้งานแค่แป้นพิมพ์และคีย์บอร์ดแต่สามารถปรับฟอนต์ของการแสดงผลใน CMD.EXE ใน Propreties...Fonts เพื่อเลือก TrueType Font ที่มีชุดอักขระภาษาไทย และถูกติดตั้งอย่างถูกวิธีเท่านั้นถึงสามารถทำงานได้ ผู้เขียนจึงเลี่ยงการแสดงผลของคำสั่งแบตช์ไฟล์ที่พอจะทำได้คือ ใช้คำสั่ง 
MSG %username% "ข้อความ"
ซึ่งมันแสดงผลออกมานอกคอนโซลแล้ว...อีกวิธีคือ
TITLE "หัวข้อภาษาไทย"
เพื่อบอกถึงโปรแกรมที่เริ่มทำงานชื่อภาษาไทย เป็นอีกวิธีที่หลีกเลี่ยงปัญหาด้านความเข้าใจในสองภาษาในอนาคต...จะเลี่ยงการทำงานของคอนโซลไปอยู่ในฟอร์มของ (VB6; Visual Basic 6) หรือโปรแกรม Notepad เพื่อหลีกการชุดอักขระโบราณที่มีทั้งปัญหาสระลอยและพิมพ์อ่านยากไปทำงานบนโปรแกรมจำพวก Object มากยิ่งขึ้น...อาจจะมีคำถามว่า...ทำไมไม่นำเสนอ...(VBS; Visual Basic Script) หรือ (JS; JAVA Script) ผมมองเห็นแล้วว่า...หากจะศึกษาคำสั่งวิชวลเบสิคสคริปหรือจาวาสคริป...ต้องมีพื้นฐานภาษาอังกฤษที่ดีและสคริปเหล่านี้...เครื่องมือช่วยในการเขียนโปรแกรมขีดความสามารถมันสู้ เมนูหรือตัวช่วยของวิชวลเบสิค6 ไม่ได้ซึ่งพิมพ์ไทยปนอังกฤษก็ยังเกิดข้อผิดพลาดน้อยกว่า...มีการแจ้งเตือนข้อผิดพลาดล่วงหน้าก่อนเรียกใช้งานจริงหากใครเคยศึกษา "แมโคร" หรือ "Visual Basic for Application" จะพบว่ามันง่าย และไม่คิดจะเบนเข็มไปสอน (AUTOIT; ออโต้อิต) ที่มาแรง เพราะคิดว่า...ในทักษะที่เท่าเทียมกันนั้น...ความสามารถของวิชวลเบสิค6 กินขาด และต่อยอดไป .NET, และ โปรแกรมทางธุรกิจเช่น Excel หรือ Corel Draw ซึ่งสามารถพัฒนา AddIn ให้โปรแกรมเหล่านั้นได้ด้วย

ขอบเขตที่เราจะศึกษาสำหรับแบตช์ไฟล์
DEL หรือ ERASE, COLOR, CD หรือ CHDIR, MD หรือ MKDIR, PROMPT, PUSHD, POPD, SET, SETLOCAL, ENDLOCAL, IF, FOR, CALL, SHIFT, GOTO, START, ASSOC, FTYPE

ไม่มีความคิดเห็น:

แสดงความคิดเห็น