เด็กโข่งกับ Batch File: มิถุนายน 2013
วันนี้...เราจะมาทำ Batch File ให้เป็น Application ... จริงๆ แล้วตัว Batch ไม่สามารถเป็น Application ได้นะครับ...เพียงแต่โปรแกรมพวกนี้...จะเ็ป็นโปรแกมที่เก็บโค้ด Batch File ไปบรรจุในตัว .EXE หรือ Application อีกที...เพื่อความสะดวกในการพกพาหรือเรียกใช้งาน...และโปรแกรมจำพวกนี้...ขอดีคือมันสามารถเปลี่ยนหน้า Icon ให้กับ ตัวโปรแกรมได้ด้วยจึงทำให้น่าใช้งาน...ที่สำคัญคือ...บรรจุแฟ้มอื่นๆ โดยการ Include เพื่อติดตั้งหรือเรียกใช้แฟ้มนั้นๆ ได้ด้วยเช่น คลิป หรือ เพลง หรือ เกมส์ต่างๆ
มาดูการใช้งานเบื่องต้นการ
วิธีการ Compile Batch file กัน
หน้าตาของโปรแกรมประมาณนี้...
1.ติกตรง [...] เพื่อเลือก Batch File ที่ต้องการตามภาพ
2. เลือก Temporary เพื่อซ่อนแบตช์ไฟล์ไปที่นั้น...และไม่เกะกะ จากนั้น compile ซะ
3. จะได้โปรแกรมตามที่ต้องการ...ถ้าปรับแต่ง... Icon ลองหา Icon มาปรับแต่งดูนะครับ...
โปรแกรมนี้ Download ที่นี้ >>>แปลง Batch File เป็น EXE
ส่วนดูตัวอย่างโปรแกรมที่แปลงแ้ล้วตามนี้...>>>ตัวอย่าง Batch File โปรแกรม พร้อม Pull down Menu
เขียนโดย ธนัตถ์เดชน์ บุญลือลักษณ์ ที่ 21:45 ไม่มีความคิดเห็น:
การสร้างเมนูพลูดาวน์ (Pull Down Menu form Batch File)?
ดูจากภาพจะเห็นว่า...มันมีสีใน CMD หรือกำหนดสีใน Batch File ได้ด้วย ความเป็นจริงทำได้...แต่ต้องอาศัยตัวช่วยหน่อยคือ colormsg.com ส่วนการรับคีย์แบบ Pull down นั้นต้องอาศัย getkey.com ซึ่งทั้งสองไฟล์นี้สามารถถูกสร้างขึ้นด้วย DeBug Script ได้ ซึ่งผู้เขียนศึกษาเทคนิคเหล่านี้มานาน...เลยประยุกต์รวมให้ผู้อ่านเองสามารถนำไปเขียนเป็นโปรแกรมที่ทำงานอย่างสวยงามได้
rem สร้างคำสั่ง conlormsg.com เพื่อให้ CMD สามารถกำหนดสีได้
( echo e100
echo 0F B6 0E 80 00 E3 4F BF 81 00 B0 20 FC F3 AE 74
echo e110
echo 45 E3 43 8A 45 FF E8 43 00 80 3D 20 74 0E C0 E0
echo e120
echo 04 8A E0 8A 05 E8 34 00 0A C4 47 49 E3 28 32 E4
echo e130
echo 50 B0 22 F2 AE 75 1F E3 1D 8B F7 8B D1 F2 AE 75
echo e140
echo 01 41 2B D1 74 10 8B CA 5B B0 20 B4 09 CD 10 AC
echo e150
echo B4 0E CD 10 E2 F9 32 C0 B4 4C CD 21 3C 61 72 02
echo e160
echo 2C 20 3C 41 72 02 2C 07 2C 30 C3
echo 6b
) | debug colormsg.com
rem สร้างคำสั่ง getkey.com เพื่อให้ รับคีย์แบบเมนูได้
( echo n getkey.com
echo a 100
echo mov ah,00
echo int 16h
echo mov al,ah
echo mov ah,4c
echo int 21
) | debug.exe getkey.com
echo ##### ### ##### ## ## ##### ## ##
echo #### ###### # ####### ##### ####### ### ### ######
echo ### ####### ## ###### ##### ######## # #### ######
echo ### ####### ### ##### ##### ###### ##### ###
echo #### ### ## #### ##### ######### ##### ######
echo ##### ### ##### ### ##### ##### ##### ##
echo. & if %a% == 1 (colormsg bf " Menu 1 ") else (colormsg 06 " Menu 1 ")
echo. & if %a% == 2 (colormsg bf " Menu 2 ") else (colormsg 06 " Menu 2 ")
echo. & if %a% == 3 (colormsg bf " Menu 3 ") else (colormsg 06 " Menu 3 ")
echo. & if %a% == 4 (colormsg bf " Menu 4 ") else (colormsg 06 " Menu 4 ")
echo Press Airrow Key and Enter or Esc to Quit
if %errorlevel%==1 goto :EscapeKey
if %errorlevel% == 28 goto :EnterKey
rem %a% == จำนวนบรรทัดเมนู + 1 set /a=1
rem %a% == 0 set /a a=จำนวนบรรทัดเมนู
:EnterKey
rem เรียกโปรแกรมตามเมนูที่ต้องการด้วย call :Program
if %a%==4 call :Menu4
rem เพิ่มคำสั่งตามโปรแกรมที่ต้องการทำงานดังตัวอย่างปิดท้าย goto :EOF
echo Menu 1
echo Menu 2
echo Menu 3
echo Menu 4
:EscapeKey
del colormsg.com
หลักการเขียนโปรกรมดังนี้
0. เพิ่มโมดูลบรรทัดสีเขียว
1. ต้องเปลี่ยนบรรทัดสีแดง
1.1 เพิ่มเมนูเข้ามาทีละบรรทัดตามตัวอย่าง สีให้เป็นค่าฐานสิบหก ส่วนข้อความต้องมีเครื่องหมายคำพูด
1.2 ตัวแปร a ในบรรทัดถัดไปต้องเป็นจำนวนบรรทัดเมนูตามที่ระบุ...เพื่่อให้แบตช์ไฟล์สามารถนำไปคำนวนหาตำแหน่งในการเปลี่ยนเมนู
2. ต้องเพิ่มคำสั่งในบรรทัดสีเหลืองคือเมนูที่ต้องการเรียกใช้งานและโปรแกรมที่จะเรียกใช้งาน
3. ต้องเพิ่มโปรแกรมที่ต้ืองการทำงานตามบรรทัดสีชมพูเพื่อให้เมนูทำงานได้สมบรูณ์ใ้ห้สร้างตำแหน่งและปิดท้าย goto :EOF ทุกครั้งเสมอ
0. โมดูลคำสั่งจะถูกสร้างทุกๆ ครั้งที่เรียกใช้งาน
1. บรรทัดสีแดงจะคำนวนและเคลื่อนไหวเมนู
2. บรรทัดสีเหลืองจะทำการรับตัวแปรหลังกด Enter มาคำนวนเพื่อแยกการทำงาน
3. บรรทัดสีชมพูคือส่วนของคำสั่งที่จะให้แบตซ์ไฟล์ทำงานอย่างแท้จริง
ตัวอย่างเมนูภาษาไทย?
ลองนำไปประยุกต์ใช้งานให้ Batch File คุณสวยขึ้น?
ลองดูนะครับ...ปรับเทคนิคเป็นของท่านเอง...และเขียน Batch File ให้สวยขึ้นและลองโพสต์มาอวดกัน
ส่วนคราวหน้า...จะซ่อนคำสั่งที่เป็นลิขสิทธิ์ของท่านใส่โปรแกรม Convert Batch File to EXE เพื่อให้เป็นความลับ...และ Batch File จะถูกเขียนขึ้นเป็นโปรแกรมที่มีเอกลักษณ์เสียที
เขียนโดย ธนัตถ์เดชน์ บุญลือลักษณ์ ที่ 23:24 1 ความคิดเห็น:
ปิดท้ายบทสรุป...ที่อยู่ไวรัส...และการป้องกัน...โดยภาพรวม?
วิธีที่จะใช้ Batch File เขียนไวรัสนั้นมีมากมายครับ...ผู้เขียนขอนำเสนอขั้นพื้นฐานเป็นพอครับ...เพราะไม่เล่งเห็นประโยชน์ในการนำเสนอการเขียนไวรัสทุกๆ รูปแบบคำสั่ง และทุกรูปแบบการเจาะระบบ...เพราะด้วยตัวของไวรัสเอง...ก็ไม่ได้มีประโยชน์อะไรมากไปกว่า...ก่อกวน...สร้างความรำคาญ...เพียงแต่อยากให้เห็นว่า...ช่องทางและการโจมตีระบบในรูปแบบดังกว่ายังมีอยู่ในปัจจุบัน...ผู้เขียนยังเห็นอีกว่า...แม้แต่ Execl ที่นิยมใช้งานในธุรกิจเอง...ก็มีช่องโหว่...ที่ยังไม่ถูกปิดเหมือนกัน...แต่การนำเสนอนั้นเป็นโทษมากกว่าประโยชน์จึงไม่อาจเปิดเผยได้...แต่ผู้ที่จะเป็นผู้ดูแลระบบหรือ แฮกเกอร์ระดับหมวกเทา...ต้องมีึึความรู้ีรอบตัวมากพอสมควร...ไม่ใช่เอะอะ...อะไรก็พึ่งพา "แอนตี้ไวรัส" ที่มันมีทั้งดีมาก...และห่วยแตก...ฉนั้้น...สมองมือ กับ หนึ่งมันสมอง...จะมีทางแก้ปัญหาเฉพาะหน้าที่ดีกว่าพวกมันเยอะ แต่อย่างไรก็ดีเครื่องทุกๆ เครื่องควรมีภูมิคุ้มกันไว้..เพราะไม่มีเครื่องใด...ในโลก...ที่ไม่เคยผ่านมือไวรัส...(ยกเว้นพึ่งซื้อมาใหม่...Hello World Babie) ฉนั้นภูมิคุ้มกันสำคัญอย่างมาก...ไม่ว่าคุณจะฝีมืออยู่ระดับใด...แต่แอนตี้ไวรัสยังจำเป็นต้องอาศัยมันทำงานอยู่เสมอ...เพราะ โค้ดไวรัส...ไม่ได้เดินอยู่บนหน้าจอให้เห็นและคลิกลบมันออกไปได้...เพราะมันทำงานโดยที่เราหรือโปรแกรมเมอร์เอง...ยังไม่รู้...ว่าวิญญาณไฟฟ้าอิเล็กทรอนิกส์จำพวกนี้...มันอยู่ในฮาร์ดดิสก์ส่วนใด...หรือยู่ในหน่วยความจำตำแหน่งใด...มีเพียงโปรแกรมด้วยกันเท่านั้นที่รู้...และสังเกตพฤติกรรมของพวกมันได้ (แต่บางจำพวกเช่นหนอนจะแสดงตัวมันเองเป็นไอคอนหรือจำลองไฟล์ตัวอื่นให้สังเกตเห็นถ้าผู้ใช้ระดับสูงจะสังเกตพฤติกรรมของมันไ้ด้)
มาดูถึงโครงสร้าง XP ระบบปฏิับัติการที่พรุ่นไปด้วยรู "ปลวก" ที่ไวรัสสามารถสิ่งสถิตย์ได้?
1. สตร์ทอัปโฟลเดอร์อย่างที่ยกตัวอย่างไปในตอนแรก คีย์ในการปรับแต่งพวกมันอยู่ใน "ฮีฟ, Hive" ต่อไปนี้
1.1[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
1.2[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
1.3[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\User Shell Folders]
1.4[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\Shell Folders]
2. Win.ini ซึ่งไวรัสที่ทำงานในโหมด 16 บิต เชื่อมต่อ 32 บิต เ่ท่านั้นที่ทำงานได้
อยู่ในคีย์ต่อไปนี้
load=virus.exe
run=virus.exe
3. System.ini ไวรัสในโหมดนี้สามารถทำงานได้ทันทีเมื่อเปิดเครื่อง...หรือหากท่านเป็นผู้ดูแลระบบอาจเขีัยนโปรแกรม "ฮุก; Hook" ส่วนนี้ไว้ก่อน
Shell=Explorer.exe virus.exe
4. c:\windows\winstart.bat (ผู้เขียนคัดลอกมาจากต่างประเทศแต่ไม่เคยรู้เหมือนกันว่าไฟล์็นี้ทำงานได้จริงไหม...น่าจะ Batch File Mode Command.com)
5. สตาร์ทอัป Registry (เป็นคีย์สำคัญที่ไวรัสร้อยละ 80 อาศัยอยู่)
5.1[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
"ชื่อคีย์"="โดร์ฟ:\โฟลเดอร์ที่อยู่ไวรัส\virus.exe"
5.2[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
5.3[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
5.4[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
5.5[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
5.6[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
5.7[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices]
6. c:\windows\wininit.ini ไวรัสอาศัยคีย์นี้ครั้งเดียวและจะล่องหนไปตลอดกาล
NUL=c:\windows\virus.exe
7. c:\windows\systemp32\Autoexec.nt ' แฟ้มนี้ใน XP นั้นทำงานได้จริงและไวรัสและคำสั่งที่อยู่ในนี้เป็นพื้นฐานสำคัญของระบบ...หากเสียหาย...เสียงหรือไฟล์บางอย่างอาจจะไม่ทำงาน
8. ไวรัสเรียกตัวเองผ่าน Shell Key ใน Registry
ไวรัสจะอาศัย พารามิเตอร์ %1 เพื่อเีรียกโปรแกรมของแฟ้มเป้าหมาย โดยที่ %2 ไวรัสจะดูว่าตัวมันติดเชื้้อหรือทำอะไรกับแฟ้มเ้ป้าหมายหรือปล่อยไปดังนี้
"virus.exe %1 %*"
9. เรียกตัวเองผ่านพาหะติดเชื้อโดยตรง...วิธีที่นี้เสนอตัวอย่างไปในตอน 2 ซึ่้่งเป็นหลักการง่ายๆ แต่แอนตี้ไวรัสไม่สามารถป้องกันได้เช่น
9.1 Excel Virus ถูกเปิด
9.2 ไวรัสที่อาศัยสตาร์ทอัป Module ทำงาน
9.3 ค้นหาแฟ้ม Excel ตัวต่อไปในเครื่อง
9.4 ติดเชื้อพาหะ
9.5 รอมีการเรียกใหม่....(เพราะสมัยนี้...มาโครถูกเรียกใช้โดยไม่ได้ตรวจสอบที่อยู่หรือแหล่งอ้างอิงที่เชื่อถือได้...ทำให้มีโอกาศถูกเล่นงาน)
วิธีนี้นักเขียนไวรัสไม่จำเป็นต้องมีความรู้อะไรมากมายในโครงสร้าง Excel แต่โจมตีด้วยหลักการง่ายๆ และยังได้ผลในปัจจุบัน...
หวังว่าจะได้ความรู้เกี่ยวกับไวรัสไม่มากก็น้อยนะครับ...
เขียนโดย ธนัตถ์เดชน์ บุญลือลักษณ์ ที่ 20:02 1 ความคิดเห็น:
การใช้เว็บเป็นเครื่องมือแสดงผลภาษาไทย Batch File ตอนจบ
ในที่สุดก็หาวิธีเซ็ตฟอนต์ภาษาไทยได้สำเร็จครับ...ดูเว็บต่างประเทศเป็นแม่แบบ เลยประยุกต์วิธีการทำงานเอา... ลองทำตามดูนะครับ...
การทำให้ CMD พิมพ์ภาษาไทยได้?
1. Download Font และ ติดตั้ง...(ตามแต่ละระบบปฏบัติการ ถ้า XP ต้องเข้า Control Panel...Font... ส่วน Windows 7-8 สามารถคลิกขวา Install ได้เลย)
Download Font Thai สำหรับ Console
2. คัดลอกคีย์ไปใช้งานบันทึกชื่อ SetFontThai.REG
@="Courier MonoThai"
"00"="Courier MonoThai"
"DisplayParams"=hex:40,01,00,00,f0,00,00,00,00,04,00,00,00,03,00,00,60,00,00,\
00,60,00,00,00,24,00,00,00,24,00,00,00,10,00,00,00,4c,00,75,00,63,00,69,00,\
64,00,61,00,20,00,43,00,6f,00,6e,00,73,00,6f,00,6c,00,65,00,00,00,12,00,91,\
ad,f5,77,e0,00,12,00,b0,e2,3e,77,74,23,dd,77,a8,f8,ca,01,ba,6d,d4,77,ec,6d,\
d4,77,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,d8,f8,ca,01,15,e4,4a,\
77,01,00,00,80,b0,e2,3e,77,00,00,00,00,19,00,02,00,d4,f8,ca,01,a4,03,00,00,\
00,00,00,00,20,b4,5c,77,89,e4,4a,77,01,00,00,80,20,b4,5c,77
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MS-DOS Emulation\Font]
"Font"="Courier MonoThai"
"0000041e"="th"
"0001041e"="th"
"0002041e"="th"
"0003041e"="th"
3. ติดตั้งคำสั่งที่คัดลอกไป...เพื่อทำงาน
4. รีสตาร์ทเครื่อง 1 ครั้ง...
5. เข้า start...run...CMD คลิกขวา ที่ Title Bar และเลือก Properties และเลือกแท็บ Font เลือก Font ชื่อ
Courier Thai ตกลง
6. ลองพิมพ์ ภาษาไทยที่ CMD ดูครับ...
การคืนค่า...Font ตัวเดิม...ที่ CMD?
1. คัดลอกคำสั่งสั่ง...และบันทึกชื่อ ResetFont.REG
"0000041e"=-
"00"=-
"DisplayParams"=-
"0001041e"=-
"0002041e"=-
"0003041e"=-
2. และเีรียกใช้งาน
3. รีสตาร์ท 1 ครั้้ง...เรียบร้อย
ที่นี้...สามารถทำเมนูภาษาไทยติดต่อกับผู้ใช้งานได้ดังภาพ
สำหรับผมแล้ว...ชอบวิธีที่แสดงผลนอก Console มากกว่า...มีทั้งการใช้ VBScript สร้างการเชื่อมต่อกับผู้ใช้งาน...และการใช้ VB Application เขียนโปรแกรมสนับสนุนภาษาไทย...หรือใช้เวปอย่างที่เคยกล่าวมาแล้ว...แต่รู้สึกกับแง่ลบของการแสดงผลภาษาไทยที่ Console มาก เพราะมันมีแต่ปัญหาที่มันไม่สนับสนุนภาษาไทย...เลยทั้งเรื่องตัดคำ...สระกระโดด...สระซ้ำ...สระลอย...ซึ่งถ้าจะใช้ Batch File เขียนโปรแกรมภาษาไทยบน Console ในอดีต...โปรแกรมเมอร์จะใช้ DOS Mode ทีมี Thai.EXE ของ "จุฬาลงกรณ์มหาวิทยาลัย" สนับสนุน... หรือ ใช้งาน TSM.EXE ของบริษัืท TSM เอง และบริษัทอื่นๆ ที่มีภาษาไทยบน DOS ครับ เพียงแต่คุณต้องทำความเข้าใจก่อนว่า... DOS Mode กับ Console บน Windows มันใกล้เคียงกันก็จริง...แต่ "เซกชั่นเดียว" กับ "มัลติเซกชั่น" การทำงานมันต่างกันครับ...รวมถึงเรื่องทรัพยากรและการเข้าถึงโปรแกรมนั้นมันต่างกันไปด้วย...ซึ่งกล่าวคือ...มันไม่ใช่ตัวเดียวกัน...อธิเช่น Console สามารถกำหนด Font รวมถึงจำนวนบรรทัดและคอลัมภ์การแสดงผลได้ครับ...ส่วน DOS ทำได้...แต่ทำได้ด้วย โปรแกรม Driver เ่ท่านั้น
ในเรื่องของการแสดงผลการทำงานวิธีอื่นๆ ยังไม่จบนะครับทั่ง
1. แสดงผล Batch File บน หน้าจอด้วยโปรแกรมที่สร้างจาก VB6
2. แสดงผลรูปแบบที่สูงขึ้นแบบเดียวกัย Auto It
เทคนิคเหล่านี้...จะมาสาธิตในตอนใหม่ที่ชื่อ "การทำงาน Batch File ร่วมกับ VB6" รอพบกันนะครับ
เขียนโดย ธนัตถ์เดชน์ บุญลือลักษณ์ ที่ 20:38 ไม่มีความคิดเห็น:
มาต่อ For /f กัน...
่ก่อนอื่นดู dir *.* เครื่องนี้ว่าเป็นยังไงกันก่อน
Volume Serial Number is 6C82-C13D
06/11/2009 04:42 AM 24 autoexec.bat
06/11/2009 04:42 AM 10 config.sys
05/10/2013 10:23 PM <DIR> Drivers
05/10/2013 10:25 PM <DIR> Intel
05/13/2013 02:48 PM <DIR> Kpcms
06/08/2013 01:49 PM <DIR> Program Files
05/10/2013 09:36 PM <DIR> Users
06/18/2013 04:38 PM 1,764,228 wialog.txt
06/10/2013 11:13 AM <DIR> Windows
3 File(s) 1,764,262 bytes
6 Dir(s) 96,140,525,568 bytes free
for /f "tokens=1,3-4" %%l in ('dir *.*') do echo %%l %%m %%n
หมายถึง เก็บบรรทัด dir *.* คอลัมภ์ 1 ใส่ %%l และ คอลัมภ์ 3 - 4 ใ่ส่ %%m-%%n
Volume drive C
Volume Number is
06/20/2013 AM 73
06/11/2009 AM 24
06/11/2009 AM 10
05/10/2013 PM <DIR>
05/13/2013 PM <DIR>
06/08/2013 PM <DIR>
06/18/2013 PM 1,764,228
06/10/2013 AM <DIR>
4 1,764,335 bytes
6 96,140,525,568 bytes
*** สังเกตุ คอลัมภ์ 2 หายไป...เพราะถูกข้าม
for /f "tokens=1,3*" %%l in ('dir *.*') do echo %%l %%m %%n
หมายถึง เก็บบรรทัด dir *.* คอลัมภ์ 1 ใส่ %%l และ คอลัมภ์ 3 ใ่ส่ %%m ส่วน คอลัมภ์ที่ 4ไปจนสุด ใส่ %%n
Volume drive C is Windows 7
Volume Number is 6C82-C13D
06/20/2013 AM 72 1.bat
06/11/2009 AM 24 autoexec.bat
06/11/2009 AM 10 config.sys
05/10/2013 PM <DIR> Drivers
05/10/2013 PM <DIR> Intel
05/13/2013 PM <DIR> Kpcms
06/08/2013 PM <DIR> Program Files
05/10/2013 PM <DIR> Users
06/18/2013 PM 1,764,228 wialog.txt
06/10/2013 AM <DIR> Windows
4 1,764,334 bytes
6 96,140,328,960 bytes free
*** สังเกตุ สามารถใช้ * เพื่อบอกสิ้นสุดข้อมูลได้
for /f "tokens=* skip=4" %%l in ('dir *.*') do echo %%l
หมายถึง เก็บบรรทัด dir *.* ข้ามมา 4 บรรทัด ทุกคอลัมภ์ ใส่ %%l
06/20/2013 10:01 AM 68 1.bat
4 File(s) 1,764,330 bytes
6 Dir(s) 96,139,554,816 bytes free
*** สังเกตุ จะไม่มี 4 บรรทัดแรกมาแสดงผล
for /f "tokens=* skip=4 eol=4" %%l in ('dir *.*') do echo %%l
หมายถึง เก็บบรรทัด dir *.* ข้ามมา 4 บรรทัด ทุกคอลัมภ์ ใส่ %%l ไม่นำบรรทัดที่ 4 นำหน้ามาคำนวน
(eol=รับข้อมูลได้แค่ตัวอักษร เดียว)
06/20/2013 10:06 AM 74 1.bat
6 Dir(s) 96,139,558,912 bytes free
*** สังเกตุ จะมีบรรทัด 4 File(s) 1,764,330 bytes มาแสดงผล
for /f "tokens=1-3,7* skip=4 delims=/ " %%l in ('dir *.*') do echo %%l %%m %%n %%o
หมายถึง เก็บบรรทัด dir *.* ข้ามมา 4 บรรทัด คอลัมภ์ให้วรรคด้วย / ดึงใส่ %%l %%m %%n จากนั้นวรรคด้วย Space bar ใส่ใน %%o
06 20 2013 1.bat
06 11 2009 autoexec.bat
06 11 2009 config.sys
05 10 2013 Drivers
05 10 2013 Intel
05 13 2013 Kpcms
06 08 2013 Program
05 10 2013 Users
06 18 2013 wialog.txt
06 10 2013 Windows
4 File(s) 1,764,357
6 Dir(s) 96,136,192,000
*** สังเกตุ วันเดือนปี ถูกแยกออกมาเป็น คอลัมภ์
จบเรื่องของ For และ คราวหน้าเจอกันใหม่...
เขียนโดย ธนัตถ์เดชน์ บุญลือลักษณ์ ที่ 20:44 ไม่มีความคิดเห็น:
การเขียนแบตช์ไฟล์เพื่อให้ได้โปรแกรมตามเป้าหมาย...บางครั้งผู้ที่เขียนติดนู่นติดนี่...ก็ล่มเิลิกเสียแล้วเพราะโปรแกรมด้านนี้...ต้องอาศัยผู้ที่มีความเพียร...และ "บ้าพลัง" อย่างมาก...ต้องการเอาชนะอุปสรรคและขีดจำกัดของภาษา ซึ่งผู้เขียนเรียนรู้ในตอนแรก...แทบจะไม่ได้อะไรจากมันมาก...แต่พอคิดจะเอามันมาเขียนเกมส์ "คำตอบเสียงดังในหัวคือ บ้าไปแ้ล้ว" แต่มันก็จริง "บ้าไปแล้ว" เอา Batch File มาเขียนเกมส์ แต่ขีดจำกัดและอุปสรรคนั้น...เป็นแรงผลักดันสำหรับพวก "บ้าพลัง" ฉนั้น...ต้องข้ามฝ่าไปให้ได้
วันนี้เรามาเรียนแบบก้าวกระโดดอีกแหละ...กับขีดจำกัดใหม่ๆ ของ CMD.EXE ซึ่งแตกต่างจากการเขียนโปรแกรมในยุคก่อนๆ มาก...
ไม่จำเป็นอีกแล้ว...ต้องต่อ Pipe ทุกบรรทัดเพื่อยิงคำสั่งไปยังแฟ้มที่ต้องการ?
เมื่่อก่อนคุณเองต้องการสร้างแฟ้ม ReadMe.TXT เพื่อจะบอกคุณสมบัติโปรแกรมแต่บางครั้งต้องส่งคำสั่ง > และ >> เพื่อยิ่งคำสั่ง Echo ไปยังเป้าหมาย...แต่ใน CMD.EXE นั้นไม่ต้องทำอย่างนั้นอีกแล้ว...ให้คุณระบุ ( "วงเล็บเปิด" และ "ชุดคำสั่งกี่บรรทัดก็ว่ามา" และ ) "วงเล็บปิด" ตามด้วย Pipe ที่ยิง ดังนี้
rem คำสั่ง DOS Batch File ยุคก่อน
echo นี้คิือข้อความทดสอบบรรทัดที่ 1>ReadMe.TXT
echo นี้คิือข้อความทดสอบบรรทัดที่ 2>>ReadMe.TXT
echo นี้คิือข้อความทดสอบบรรทัดที่ 3>>ReadMe.TXT
echo นี้คิือข้อความทดสอบบรรทัดที่ 4>>ReadMe.TXT
echo นี้คิือข้อความทดสอบบรรทัดที่ 5>>ReadMe.TXT
echo นี้คิือข้อความทดสอบบรรทัดที่ 6>>ReadMe.TXT
ในปัจจุบันเป็นแบบนี้...
rem คำสั่ง Batch File ยุคใหม่
( echo นี้คิือข้อความทดสอบบรรทัดที่ 1
echo นี้คิือข้อความทดสอบบรรทัดที่ 2
echo นี้คิือข้อความทดสอบบรรทัดที่ 3
echo นี้คิือข้อความทดสอบบรรทัดที่ 4
echo นี้คิือข้อความทดสอบบรรทัดที่ 5
echo นี้คิือข้อความทดสอบบรรทัดที่ 6
)>ReadMe.TXT
ไม่จำเป็นอีกแล้ว...ที่ต้องระบุตำแหน่งสิ้นสุด Batch File?
เมื่อก่อน ถ้าคุณต้องเขียนแบตช์ไฟล์และมีการ Goto :END เพื่อบอกให้รู้ว่า...นี้น่ะนะ...สิ้นสุดคำสั่งทั่งมวลแล้ว...ไม่ต้องร่ายบรรทัดคอมมานด์มาอีก... ถ้าเป็นเมื่อก่อนต้องระบุ :END หรือ :EndOfFile เพิ่อบอกให้ Batch File รู้ว่า ในตอนท้ายสุดของคำสั่งว่า...มันหมดแล้วนะคำสั่งทั้งหมด...ของโปรแกรมเช่น
เจ้า :End จะเป็นส่วนที่บอกว่า...สิ้นสุดแล้วนะโปรแกรมแต่ต่อไปนี้...ไม่ต้องอีกแ้ล้ว...แค่คุณใส่้คำสั่งนี้
:EOF หรือ End Of File แค่นี้...Batch File จะเข้าใจทันทีว่าไปที่ท้ายสุดของโปรแกรมดังนี้
echo Type 1-3 goto Label
if not "%1"== "" goto :%1
โปรแกรมนี้...จะทำการบอกตำแหน่งที่มันกระโดดไป...โดยไม่เห็นต้องระบุตำแหน่ง :EOF เลยแม้แต่น้อย
ไม่จำเป็นอีกแล้ว...ที่ต้องยิงคำสั่งหรือผลการทำงานไปยังแฟ้มอื่น...ให้รกเครื่อง?
อย่างที่เคยบอกไปแล้วตั้งแต่ตอนแรกๆ คือ ใครเข้าใจคำสั่ง For /f ได้ท่่องแท้...เหมือนรู้ซึ่งถึงคัมภรี์ "มังกร 18 ท่า" ของมังกรหยก เพราะมันถือเป็นไม้ตายของ CMD บนวินโดวส์อย่างแท้จริงเพราะมันสามารถทำงานที่ซับซ้อนให้จบภายใน Batch File ตัวเดียว...โดยไม่ต้องโยนคำสั่งไปยังแฟ้มอื่นๆ อีกต่อไป
for /f "tokens=*" %%l in ('DIR *.*') do echo %%l
หมายถึง ให้นำคำสั่ง DIR *.* มาเก็บยังตัวแปร %%l ทีีละบรรทัด โดย Tokens คือ * หมายถึง โดยไม่สนใจว่้ามีกี่คอลัมภ์ ให้นำมาหมดสมมุติผลที่ได้ดังนี้
Volume Serial Number is D04A-1158
Directory of C:\DOCUME~1\SM
06/19/2013 03:03 PM <DIR> .
06/19/2013 03:03 PM <DIR> ..
06/19/2013 03:03 PM 61 1.bat
06/18/2013 09:32 AM <DIR> Desktop
06/18/2012 12:46 AM <DIR> Favorites
06/18/2012 12:40 AM <DIR> handyCafe
09/29/2012 12:46 AM <DIR> My Documents
07/01/2012 03:42 PM <DIR> Start Menu
06/20/2012 08:44 PM <DIR> Tracing
1 File(s) 61 bytes
8 Dir(s) 18,231,889,920 bytes free
for /f "token=1" %%l in ('DIR *.*') do echo %%l
หมายถึง เก็บบรรทัด DIR มาใน %%l โดยนำมาเฉพาะ คอลัมภ์ที่ 1
ผลที่ไำด้จะเป็นเช่นนี้
for /f "token=1-3" %%l in ('DIR *.*') do echo %%l %%m %%n
หมายถึง ให้เก็บบรรทัด DIR *.* ใน %%l %%m %%n (เพราะ 1 คือ %%l และ 2-3 จะเป็น %%m-%%n โดยอัตโนมัติ) โดยนำมาเฉพาะ คอลัมภ์ที่ 1-3
Volume in drive
06/19/2013 03:07 PM
06/18/2013 09:32 AM
06/18/2012 12:46 AM
06/18/2012 12:40 AM
09/29/2012 12:46 AM
07/01/2012 03:42 PM
06/20/2012 08:44 PM
1 File(s) 71
8 Dir(s) 18,233,896,960
ตอนหน้าจะมาต่อ For /F ต่อกัน
เขียนโดย ธนัตถ์เดชน์ บุญลือลักษณ์ ที่ 01:10 ไม่มีความคิดเห็น:
เขียนโดย ธนัตถ์เดชน์ บุญลือลักษณ์ ที่ 00:34 3 ความคิดเห็น:
เขียนโดย ธนัตถ์เดชน์ บุญลือลักษณ์ ที่ 21:02 ไม่มีความคิดเห็น:
การใช้เว็บเป็นเครื่องมือแสดงผลภาษาไทย Batch File ตอน 2
เทคนิคขั้นเทพลำดับต่อไป...
บางครั้งคุณไม่รู้จะเขียนแบตซ์ไฟล์เพื่อให้เรียกภาษาไทยยังไง (โดยไม่ต้องยุ่งกับการ Setup Font True Type ภาษาไทยที่ลองรับ DOS) และต้องคลิกนู่นคลิกนี่ ซึ่งผู้ใช้งานบางครั้งผู้ใช้บางคนอาจทำไม่เป็น หรือยุ่งยากในการลำดับเหตุการณ์ใส่คู่มืออีก “ผมแนะนำว่า”
ข้อเสียที่สำคัญสุดของ Ture Type ภาษาไทยคือ มันสระกระโดด...ใน DOS และอ่านแทบไม่รู้เรื่อง อีกอย่างการแสดงแสง สี เสียง ทำไม่ได้เต็มที่อย่างที่ตั้งใจ และคุณจะดันทุรัง นำภาษาไทยไปใส่ Console ทำไม?
การแสดงผล Batch File ด้วยภาษาไทยบนวินโดวส์...ทางเลือกอื่นคือ?
1. แสดงผลผ่าน Notepad เอาดื่อๆ และเรียกมันผ่านคำสั่ง Start เช่น
Echo ทดสอบข้อความ>readme.txt
Echo บรรทัดต่อมา...>>readme.txt
ซึ่งในวิธีนี้เองมันง่ายก็จริง...แต่ไม่สามารถรับหรือตอบรับหน้าจอกับผู้ใช้งานได้ อย่างเช่น รับการกด Yes No หรือ การพิมพ์ “Password” ซึ่ง Notepad ทำไม่ได้อยู่แล้ว
2. สร้างหน้าเว็บผ่าน Batch File และรอให้มันเรียก Batch File อีกครั้งผ่าน Evens ของ JAVA เพียงเล็กน้อย ทำให้สามารถแสดง ทั้งภาพ เสียง ลิงค์ หรือแม้แต่ปุ่มต่างๆ และโยนภาระให้ JAVA จัดการแค่เหตุการณ์เท่านั้นส่วนคำสั่งเชิงลึก...หรือคำสั่งที่คุณมีความรู้เกี่ยวกับแบตซ์ไฟล์เชิงเทคนิค ให้ JAVA เรียก Batch File ตัวเดิมที่สร้างหน้าเว็บนี้แหละ
และทำไมไม่เขียนด้วย JAVA ทั้งหมดซะ?
คำตอบคือ ใช่มันดีกว่า เหตุผลคือ แต่มันจะง่ายกว่าไหม ถ้าเขียนคำสั่ง DOS ที่รันบนวินโดวส์ทุกรุ่นโดยไม่ต้องคำนึงถึงเรื่องการสื่อสาร...แต่แค่เขียนเครื่องมือช่วยเหลืองานด้านวินโดวส์ เช่นรวบรวมคำสั่ง .BAT หรือ .CMD ที่เป็นการปรับแต่ง Registry ทั้งหมดไว้แล้วแต่ต้องนำ Code ทั้งหมดไปเขียนหรือ Compile ใหม่บน JAVA โอย...ไม่ง่ายเลย สู้นำ Batch File ตัวเดิม...มาบรรจุ HTML ง่ายกว่าเยอะ
และมันจะทำงานได้เหรอถ้าไม่ต่อเน็ต?
คำตอบคือ ได้ แต่ คำสั่งที่มีการลิงค์ไปยังเว็บไซต์เท่านั้นที่ไม่ทำงาน เหตุผลที่ดีกว่าคือ การนำ Batch File ทั้งชุดไปเขียนใน Programs Application นั้นยุ่งยากกว่ามากหากคุณมีคำสั่ง Batch File หลายๆ คำสั่ง และต้องสร้างปุ่มคำสั่งบน Application นั้น อย่างเช่น VB6 ไหนคุณต้องสร้างปุ่ม ระบุชื่อปุ่มบรรจุโค้ด และสร้างคำสั่งเรียกใช้ ถ้าเป็นแค่ คำสั่ง สองคำสั่ง...ก็ไม่เป็นไร แต่ถ้าคุณมี เทคนิคการปรับแต่งที่รวบรวมไว้เป็นร้อยเทคนิค และต้องการมารวมไว้ในโปรแกรมเพียงโปรแกรมเดียวมันไม่ง่าย...อย่างเช่นการสร้างโปรแกรม Tweak สักตัวถ้าเป็น VB6 คุณต้องใช้เวลาหลายวัน...และอาจทดสอบกันเป็นอาทิตย์เพื่อดูว่ามันทำงานได้ แต่ในทางกลับกัน ถ้าเป็น Web Application เองแค่เปิดแบตซ์ไฟล์ด้วย Notepad และสร้างคำสั่งยิงการแสดงผลไปที่เว็บไซต์ วิธีนี้...ประหยัดขั้นตอน...และข้อผิดพลาดได้มาก...ง่าย และนั้นคือเรื่องที่จะกว่าถึงในบล็อกนี้
จากตอนแรก...เราสร้างเว็บ...เว็บสร้าง Batch File แต่ในตอน 2 นี้...Batch File สร้างเว็บ...เว็บส่งค่ากลับมายัง Batch File ที่สร้าง ซึ่งแตกต่างจากวิธีแรกโดยสิ้นเชิง (วิธีแรกเป็นการนำเสนอการเขียน Batch ง่ายๆ ที่จะรันบนเว็บไซต์ หากแต่มันไม่ได้ถูกควบคุมโดยแบตซ์ไฟล์เลย...แต่ถูกควบคุมด้วย JAVA Script) อย่าพึ่ง “งง” สรุปโดยสั้นๆ คือ บล็อกของผมเน้นการทำงานของ Batch File ที่สามารถควบคุมสิ่งต่างๆ ที่เกิดขึ้นภายใน Windows ได้ ซึ่งอาจจะไม่มีใครเขาทำกัน...แต่ผมเสนอ “คลิกไอเดีย” สำหรับคนที่สนใจ Batch File อย่างจริงจังมาควบคุมการทำงานของระบบปฎิบัติการวินโดวส์ นั้นเอง
ทำไมต้องใช้ Batch File สร้างเว็บ?
คำตอบคือ เพื่อความง่ายในการควบคุม โดยดูจากตารางเปรียบเทียบดังนี้
เว็บโดยทั่วไป
เว็บที่สร้างด้วย Batch File
- สร้างด้วยภาษา HTML
- สร้างคำสั่ง HTML ด้วย Batch File
- ควบคุมการทำงานผ่าน JAVA หรือ VB
- สร้างคำสั่ง JAVA หรือ VB เพื่อควบคุมเล็กน้อย
- ส่งผลการทำงานหรือฟอร์มเอกสารกลับไปยังฟังก์ชั่น
ของภาษาที่ควบคุม
- ส่งผลการทำงานคำสั่งควบคุมให้โยนตัวแปร
หรือพารามิเตอร์กลับมายัง Batch File
- คำสั่งและหน้าเว็บอยู่ในไฟล์เดียวกัน
- คำสั่ง Batch File แยกเป็นเอกเทศ และสร้างเว็บ
หลอกๆ ขึ้นมาแสดงผลชั่วคราว
- ทำงานเร็วกว่า แต่คำสั่งที่สามารถเจาะลึกไปยัง
ระบบไม่ได้เพราะข้อจำกัดของสคริป
- ทำงานข้ากว่า สามารถส่งอะไรหรือเจาะลึกไป
ยังระบบวินโดวส์ส่วนใดก็ได้ เช่น โยนผลการ
ทำงานของ คำสั่ง SET ออกทางเว็บหลอกๆ ก็ได้
มาดูแผนภาพแสดงการทำงาน
ภาพนี้ แสดงการทำงานแบบตัวอย่างแรกที่ Batch File ไม่สามารถรับค่าหรือพารามิเตอร์ใดๆ จาก เว็บได้
ภาพนี้...แสดงตัวอย่างการสร้างเว็บด้วย Batch File และคืนค่าหรือพารามิเตอร์ที่ได้จาก Script ภายใน เว็บ เพื่อให้ Batch File สามารถทำงานได้อย่างเป็นเอกเทศได้
ตัวอย่าง Batch File แบบสร้างการสื่อสารภาษาไทยกับเว็บ
if "%1"=="/a" goto :TestPara
title โปรแกรมทดสอบการส่งและคืนค่าจากหน้าเว็บที่สร้าง โดย ธนัตถ์เดชน์ บุญลือลักษณ์
echo 1.Show Marquee Message
echo 2.Show Background Color
echo 3.Set Titlebar
echo 4.Testing HTML Call Module Batch File
set /p m=Type Menu Number=
if %m%==1 call :Marquee
if %m%==2 call :SetColor
if %m%==3 call :SetTitle
if %m%==4 call :CallModule
:Marquee
echo ^<marquee^>
echo นี้คือตัววิ่งสร้างโดย Batch File [Coding By] : ธนัตถ์เดชน์ บุญลือลักษณ์
echo ^</marquee^>
)>>Test.htm
start Test.htm
echo ^<body bgcolor="#ff99cc"^>
echo ^<title^>ทดสอบการใส่คำสั่งผ่าน Batch File โดย ธนัตถ์เดชน์ บุญลือลักษณ์^</title^>
)>Test.htm
:CallModule
( echo ^<head^>
echo ^<title^>ทดสอบการส่งผ่านข้อมูลกลับมายัง Batch File ที่เรียกใช้งาน^</title^>
( echo ^<script language="JAVAScript"^>
echo var jsob = new ActiveXObject^("Wscript.Shell"^);
echo jsob.run^("CatEye.bat /a"^);
echo 1.สามารถสร้างหน้าเว็บด้วย Batch File^<br^>
echo 2.ส่งข้อมูลกลับมายัง Batch File ที่สร้างหน้าเว็บได้^<br^>
echo 3.ความซับซ้อนอยู่ที่การส่งผ่านค่าทาง Parameter ของ Batch File นั้น^<br^>
:TestPara
msg %username% การทดสอบพารามิเตอร์ทำงานได้
ตัวอย่าง หน้าเว็บ
ประโยชน์ที่จะได้รับคืออะไร?
คำตอบคือ Batch File สามารถส่งภาษาไทยขึ้นไปโต้ตอบกับผู้ใช้ผ่านเว็บอีกที และยังสามารถรับค่าและคีย์ค่าผ่านเว็บได้ เช่น หน้าจอ Log In หรือ กล่องข้อความ Yes No เพื่อตัดสินใจทำหรือไม่ทำใน Batch File โดยที่ไม่จำเป็นต้องเขียน Application รองรับ อาศัยแค่หลักการง่ายๆ ของ Plaintext ที่ใช้งานแค่เพียงตัวอักษรภาษาไทยและอังกฤษเขียนขึ้นมาเป็นโปรแกรมใช้งานทั่วๆ ไปได้
แต่หากวิธีที่กล่าวมาตอนนี้...ยังไม่ถูกใจ...คราวหน้าเรามาลง Font ภาษาไทยใน Cmd.exe กันว่ามันใช้งานภาษาไทยบน Console ได้ดีมากแค่ไหน...และอะไรคือปัญหาเมื่อต้องนำ Batch File ไปรันเครื่องอื่นๆ ที่ไม่มี Font ภาษาไทย
เขียนโดย ธนัตถ์เดชน์ บุญลือลักษณ์ ที่ 03:20 1 ความคิดเห็น: