วันพฤหัสบดีที่ 5 กันยายน พ.ศ. 2556

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

การแสดงข้อความสี...โดยไม่ใช้ Debug
ส่วนใหญ่การแสดงสีใน CMD นั้นผู้ใช้งานส่วนใหญ่ จะใช้คำสั่ง Color แต่ ติดปัญหาตรงที่ Color นั้นไม่สามารถแสดงสีที่ต้องการเป็นบรรทัด หรือเฉพาะคำได้...แต่ยังไงมาถึงตรงนี้แล้ว...เรามีทางเลือกคือเลือกใช้งานฟังก์ชั่นที่สามารถแสดงสีที่แตกต่างได้ใน CMD ซึ่งคำสั่งของ DOS มีเพียงคำสั่งเดียวคือ FindStr เจ้าคำสั่งนี้...มันจะแสดงชื่อแฟ้มข้อมูลที่ค้นหาคำออกมาเป็นสีที่ต้องการได้ แต่ต้องประยุกต์ใช้งานให้เ็ป็นสักนิด...มาดูกัน

:CEcho color text
pushd %temp%
echo. >%2
findstr /v /a:%1 /R "^$" "%~2" nul
popd
goto :eof

โปรแกรมนี้เล็กกระทัดรัดมันทำงานอย่างไร
:CEcho color text ; ชื่อโปรแกรม CEcho เวลาเรียกใช้เช่น Call :CEcho 0A Testing...
pushd %temp% ; บรรทัดนี้จะให้แฟ้มขยะชืิ่อเดียวกับข้อความไปเก็บในโฟลเดอร์ชัวคราวรอลบทิ้ง
echo. >%2 ; สร้างแ้ฟ้มขึ้นมาโดยไม่มีข้อความใด
findstr /v /a:%1 /R "^$" "%~2" nul ; แสดงสีข้อความตามที่กำหนด
popd ; กลับสู่โฟลเดอร์ที่ทำงานอยู่
goto :eof ; จบโปรแกรม

มาดูภาพการทำงานของมัน
@echo off
call :CEcho 02 "Testing... Message1"
call :CEcho 84 "Testing... Message2"
call :CEcho 17 "Testing... Message3"
call :CEcho 9A "Testing... Message4"
call :CEcho 3C "Testing... Message5"
pause
goto :eof

:CEcho color text
pushd %temp%
echo. >%2
findstr /v /a:%1 /R "^$" "%~2" nul
popd
goto :eof


การทำงานจะปรากฎดังภาพ...แต่ข้อเสียคือ มันมีสัญลักษณ์ : ติดมาด้วยเนื่องจาก... FindStr นั้นจะมี : คั่นระหว่างชื่อแฟ้มและข้อความ...ยังไงก็แก้ขัดไปก่อน...เพราะการลบมันออกต้องอาศัยฟังก์ชั่นที่มากกว่านี้หลายบรรทัด...เกรงว่า...ว่าจะงงเสียก่อน...วันนี้ลองแค่นี้ดูก่อน...

ที่นี้...ในบางครั้งเราอยาก Echo แบบหลายครั้ง ในบรรทัดเดียวทำได้ไหม...
ทำได้ครับ...คำสั่งเป็นแบบนี้
@echo off
echo|set /p=echo same line : 
pause
หน้าตาของการแสดงข้อความในบรรทัดเดียวกันเป็นยังไงมาดู

จะเห็นว่า มีข้อความว่า echo same line : 
จากนั้นคำสั่ง pause จะแสดงผลการทำงานต่อคำสั่ง Set /p อีกที...ทำให้สามารถแสดงข้อความในบรรทัดเดียวกันได้ ทีนี้...มาดูตัวอย่าง
@echo off
echo|set /p=Text 1 : 
echo|set /p=Text 2 : 
echo|set /p=Text 3 : 
echo|set /p=Text 4 : 
echo|set /p=Text 5 : 
echo|set /p=Text 6 : 
pause>nul
ผลการทำงานคือ

จะเห็นว่า...ข้อความต่อกันในบรรทัดเดียวกัน...

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

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