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

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

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

Matrix แบบง่าย...? 

@echo off
title loop example
color 0A
:Loop
for %%a in (
  "1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0"
  "1 1 0 0 0 0 1 1 0 1 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 0 0 1 1 0 0 1"
  "0 1 1 0 1 0 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 0 1 0 1 1 0 0 0 1 1 0 1 1 0 1 0"
  "0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 1 0 1 0 0 1 1 0 1 1 0 1 0 1 0 1"
  "1 1 0 0 0 0 1 1 0 1 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 1"
  "1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0"
) do (
  echo %%~a
)
goto :Loop

จากคำสั่ง...จะเห็นว่า...มันก็ง่ายๆ ไม่ต้องไปคำนวนอะไรให้ซับซ้อนก็แค่แสดง 0 กับ 1 วนไปวนมา...ไม่ถึงกับต้องคำนวนให้วุ่นวายอย่างหลายๆ ตัวอย่าง...ของบางคน...

Logo แบบ ไฟฟ้าซ็อต?
มาถึงสิ่งที่ผมภูมิใจนำเสนอ...บางเวปนั้นการทำไฟซ็อตหน้าจอ...อาจจะต้องใช้คำสั่งเกี่ยวกับ Debug แต่ผมว่ามันไม่จำเป็นใดๆ ทั่งนั้น...เพียงอาศัยคำสั่ง color และวนลูป แค่นี้...มันก็ทำให้อะไรที่ดูว่ายากกลับง่ายในพริบตา...

*** การจับภาพน่าจอ...อาจเร็วกว่าอัตรากระพริบของตัวหนังสือ...ตัวอย่างจึงไม่สามารถแสดงสีได้สมจริง

@echo off
ECHO   _/_/_/  _/_/_/_/_/_/_/_/_/_/_/_/_/    _/_/_/_/_/
ECHO _/      _/    _/    _/    _/      _/    _/_/    
ECHO _/      _/    _/    _/    _/_/_/    _/_/  _/_/_/
ECHO _/      _/_/_/_/    _/    _/          _/  _/    
ECHO _/_/_/_/_/    _/    _/    _/_/_/_/    _/  _/_/_/_/
:Loop
for %%a in (08 09 0a 0b 0c 0d 0e 0f) do (
color %%a
ping 0.0.0.0 -n 1>nul
)
goto :Loop

การยืดหดกรอบ CMD แบบเคลื่อนไหว...?
บางครั้งการเปิดตัว Batch File อยากให้อลังการณ์ จึงต้องให้มันมีการเคลื่อนไหวยืดหดหน้าจอได้เหมือนในหนัง...ซึ่ง Batch File เองก็ทำได้ครับตามนี้ นำโค้ดไปวางใน Batch File ที่ต้องการ จากนั้นเวลาเรียกใช้ให้เรียก Call :ShowMode /s เพื่อให้กรอบแสดงจากเล็กมาใหญ่...และ Call :ShowMode /e เพื่อปิดท้ายการเมื่อจบโปรแกรมคือ แสดงกรอบจากใหญ่มาหาเล็ก และหายไปครับ...

:ShowMode %1
@echo off
if "%1"=="/s" goto :StartCMD
if "%1"=="/e" goto :EndCMD
goto :HelpShowMode
:StartCMD
set b=27
for /l %%a in (0,1,25) do (
  call :SetModeStartCMD %%a
  ping 0.0.0.0 -n 1>nul
)
set b=
goto :EOF
:SetModeStartCMD %1
  set /a b=^%b%+2
  mode %b%,%1
goto :EOF
:EndCMD
set b=80
for /l %%a in (25,-1,0) do (
  call :SetModeEndCMD %%a
  ping 0.0.0.0 -n 1>nul
)
set b=
goto :EOF
:SetModeEndCMD %1
  set /a b=^%b%-2
  mode %b%,%1
goto :EOF
:HelpShowMode
echo ShowMode /s = Start Batch File
echo          /e = End Batch File
goto :EOF


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

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