วันจันทร์ที่ 8 กรกฎาคม พ.ศ. 2556

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

คำสั่ง Browse Folder?
บางครั้งแบตช์ไฟล์เองก็ไม่สามารถที่จะเลือกโฟลเดอร์ที่ต้องการได้...หรือถ้าเขียนเป็นคำสั่งให้เลือกแบบ คลิก หรือ Pull Down เองก็ยากและซับซ้อนมากทางเลือกก็คืออาศัย Visual Basic ซะ...จะได้หมดปัญหา...มาดูกันว่าคำสั่งนี้ทำงานอย่างไร

คำสั่ง
@echo off
call :BrowseFolder
set /p p=Path File Name : 
pause
goto :EOF

:BrowseFolder
( echo Set SA = CreateObject^("Shell.Application"^)
  echo Set WS = WScript.CreateObject^("WScript.Shell"^)
  echo Set SAB = SA.BrowseForFolder^(0, "กรุณาเลือกโฟลเดอร์เป้าหมาย", 1, "c:\Programs"^)
  echo WS.SendKeys SAB+"{Enter}"
)>BrowseFolder.vbs
start BrowseFolder.vbs

คำสั่ง Massage Box เพื่อแสดงกล่องข้อความ?
หลายครั้งที่ต้องติดต่อผู้ใช้งานเพื่อตัดสินใจในการทำงาน...ต่างๆ และ Batch File เองก็ไม่สามารถตอบโจทย์ได้อย่างเต็มที่...จึงมีทางเลือกคืออาศัย Visual Basic อีกเช่้นกัน...แต่คำสั่ง MsgBox ของ Visual Basic นั้นซับซ้อนยุ่งยาก...มีเงือนไขเยอะ...จึงต้องเขียน Batch File ให้มีพารามิเตอร์เลือกทำงานตามรูปแบบที่ถูกต้อง และแสดงข้อความช่วยเหลือ...หากใช้คำสั่งผิดไป...

คำสั่ง...
@echo off
call :MsgBox "เลือกปุ่ม ที่ท่านต้องการ" /ync /c
set /p YesNo=Buttons : 
pause

:MsgBox
for %%a in (%1 %2 %3) do (
  if "%%a"=="" goto :HelpMsgBox
)
if "%2"=="/oo" set buttons=0 & goto :MsgBox2
if "%2"=="/oc" set buttons=1 & goto :MsgBox2
if "%2"=="/ari" set buttons=2 & goto :MsgBox2
if "%2"=="/ync" set buttons=3 & goto :MsgBox2
if "%2"=="/yn" set buttons=4 & goto :MsgBox2
if "%2"=="/rc" set buttons=5 & goto :MsgBox2
goto :HelpMsgBox
:MsgBox2
if "%3"=="/c" set icon=16 & goto :MsgBox3
if "%3"=="/q" set icon=32 & goto :MsgBox3
if "%3"=="/e" set icon=48 & goto :MsgBox3
if "%3"=="/i" set icon=64 & goto :MsgBox3
goto :HelpMsgBox
:MsgBox3
set /a Information=%icon%+%buttons%
( echo Set WS = WScript.CreateObject^("WScript.Shell"^)
  echo r=Msgbox^("%~1",%Information%, "กล่องข้อความโดย ธนัตถ์เดชน์  บุญลือลักษณ์"^)
  echo select case r
  echo case 1
  echo   b="OK"
  echo case 2
  echo   b="Cancel"
  echo case 3
  echo   b="Abort"
  echo case 4
  echo   b="Retry"
  echo case 5
  echo   b="Ignore"
  echo case  6
  echo   b="Yes"
  echo case  7
  echo   b="No"
  echo end select
  echo WS.SendKeys b+"{Enter}"
)>MsgBox.vbs
start MsgBox.vbs
goto :EOF
:HelpMsgBox
  echo MsgBox "Message" /[Buttons] /[Icon]
  echo Buttons is  /oo  = OKOnly
  echo             /oc  = OKCancel
  echo             /ari = AbortRetryIgnore
  echo             /ync = YesNoCancel
  echo             /yn  = YesNo
  echo             /rc  = RetryCancel
  echo Icon is     /c = Critical
  echo             /q = Question
  echo             /e = Exclamation
  echo             /i = Information
goto :EOF

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

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

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