เนื่องจากมีโอกาสที่ต้องตรวจสอบไฟล์ต่าง
ๆ ใน System32
ว่ามีอยู่หรือเปล่า ครั้นจะให้ User ตรวจสอบให้ทีละไฟล์ก็ดูจะยุ่งยากไปหน่อย ก็เลยได้เขียน Batch
file ในการตรวจสอบ
จากนั้นจึงเขียนอีกไฟล์เพื่อทำการ register ไฟล์เหล่านั้น
บทความนี้ก็จะแสดงวิธีการวน
Loop ใน batch
file กันนะ
โดยจะมีรายละเอียดอื่นที่จำเป็นเพิ่มขึ้นมาคือ การใช้ Array ใน batch
คำสั่งที่จะใช้ในการตรวจสอบไฟล์ที่จะใช้คือ
exist ร่วมกับ if
โดยมีรูปแบบดังนี้
if exist C:\Windows\System32\File1.OCX echo OK -
File1.OCX
และเนื่องจาก
batch file ไม่มีคำสั่ง
else ดังนั้นจึงต้องเขียน
if อีกอันเพื่อดัก
แจ้งเตือนกรณีไม่มีไฟล์อยู่ โดยใช้รูปแบบคำสั่ง
if not exist C:\Windows\System32\File1.OCX echo Not exist
- File1.OCX
edit : มีคำสั่ง else นะครับ สามารถแก้ไขเป็นรูปแบบ
if exist C:\Windows\System32\File1.OCX (echo OK - File1.OCX) else (echo Not exist - File1.OCX)
ได้ครับ
ถ้าจะเขียน
batch file แบบถึก
ๆ ก็สามารถเขียนได้โดยการเอา Code ข้างต้นมาเขียนต่อกัน แล้วเปลี่ยนชื่อไฟล์ไปเรื่อย ๆ จนครบทุกไฟล์
ถ้ามี
15
ไฟล์ที่ต้องตรวจสอบ ก็เขียนไปประมาณ 30 บรรทัด แบบนี้
if exist C:\Windows\System32\File1.OCX echo OK -
File1.OCX
if not exist C:\Windows\System32\File1.OCX echo Not exist
- File1.OCX
if exist C:\Windows\System32\File2.OCX echo OK -
File2.OCX
if not exist C:\Windows\System32\File2.OCX echo Not exist
- File2.OCX
if exist C:\Windows\System32\File3.OCX echo OK -
File3.OCX
if not exist C:\Windows\System32\File3.OCX echo Not exist
- File3.OCX
if exist C:\Windows\System32\File4.OCX echo OK -
File4.OCX
if not exist C:\Windows\System32\File4.OCX echo Not exist
- File4.OCX
... และต่อไปเรื่อย
ๆ
แบบนี้มันก็ทำได้นะ
แต่มันจะมีปัญหาเวลาเราต้องการนำมาใช้ซ้ำ เราต้องมาแก้ทุกบรรทัด ซึ่งมันเยอะ
และทำให้พิดพลาดได้ง่าย
อีกปัญหาคือ
หากพิมพ์ path ผิด
เราต้องมานั่งแก้ใหม่หมดเลย
จึงใช้วิธีการสร้างตัวแปรแบบ
Array ขึ้นมาเพื่อเก็บชื่อไฟล์ที่ใช้ตรวจสอบ
จากนั้นจึงค่อยใช้วิธีการวน
Loop ในการตรวจสอบ
เมื่อทำแบบนี้ก็จะสามารถ
reuse code นี้ได้ง่ายมากขึ้น
การสร้างตัวแปร
Array ก็จะทำได้โดย
set chkFileName[0]=ชื่อไฟล์1
set chkFileName[1]=ชื่อไฟล์2
set chkFileName[2]=ชื่อไฟล์3
... ต่อไปจนครบทุกไฟล์
การอ้างอิงไปยังตัวแปร
Array ที่เราสร้างขึ้น
!chkFileName[index]!
ในส่วนของการวน
Loop ก็จะได้
for /l %%n in (0,1,18) do (
if exist C:\Windows\System32\!chkFileName[%%n]! echo OK -
!chkFileName[%%n]!
if not exist C:\Windows\System32\!chkFileName[%%n]! echo
Not exist - !chkFileName[%%n]!
)
มาดู
code เต็ม
ๆ กัน
@echo off
setlocal enabledelayedexpansion
CHOICE /M "Press Y for Window32bit and N for
Windows64bit"
if "%ERRORLEVEL%" EQU "1" goto
Win32Bit
if "%ERRORLEVEL%" EQU "2" goto
Win64Bit
:Win32Bit
set refWindow="System32"
goto ResumeCheckFile
:Win64Bit
set refWindow="SysWOW64"
goto ResumeCheckFile
:ResumeCheckFile
::List file that need to check
set chkFileName[0]=msvbvm60.dll
set chkFileName[1]=oleaut32.dll
set chkFileName[2]=olepro32.dll
set chkFileName[3]=asycfilt.dll
set chkFileName[4]=stdole2.tlb
set chkFileName[5]=COMCAT.DLL
set chkFileName[6]=MSSTDFMT.DLL
set chkFileName[7]=MSDBRPTR.DLL
set chkFileName[8]=msjro.dll
set chkFileName[9]=EXCEL.EXE
set chkFileName[10]=MSHFLXGD.OCX
set chkFileName[11]=FM20.DLL
set chkFileName[12]=TABCTL32.OCX
set chkFileName[13]=MSCOMCTL.OCX
set chkFileName[14]=COMDLG32.OCX
set chkFileName[15]=MSCOMCT2.OCX
set chkFileName[16]=VB6STKIT.DLL
echo ## Check vb need reference file ##
echo =========================
for /l %%n in (0,1,16) do (
if exist C:\Windows\!refWindow!\!chkFileName[%%n]! echo
OK - !chkFileName[%%n]!
if not exist C:\Windows\!refWindow!\!chkFileName[%%n]!
echo Not exist - !chkFileName[%%n]!
)
echo ## Finished check ##
echo =========================
pause
|
โดยใน
code ตัวอย่างนี้
เพิ่มการเลือกว่าระบบที่กำลังตรวจสอบนี้ เป็น windows 32bit หรือ 64bit เนื่องจากทั้งสองระบบตำแหน่งไฟล์ระบบมันอยู่คนละตำแหน่งกัน
เมื่อทดสอบรัน
batch file ก็จะได้ผลลัพธ์
ประมาณนี้
[Note ไว้กันลืม]
ความคิดเห็น
แสดงความคิดเห็น