ครานึงได้ไปที่พันธ์ทิพย์ เพื่อเอาฮาร์ดดิสต์ไปเปลี่ยน ก็เลยเลียบๆเคียงๆ ถามทางช่างเขาดู ผม : "เอะ น้องเดี๋ยวนี้ทำไมฮาร์ดดิสต์มันพังเร็วจังเลยล่ะ" ช่าง : "อ๋อ ... พี่ก้อดูที่ราคาของมันซิ" ผม : อึ้ง ... เออตูไม่น่าถามเลย (คิดในใจ ... มันน่าเขกกะโหลกตัวเองนิ)
ปัจจุบันนี้เทคโนโลยีทั้งฮาร์ดแวร์ และ ซอฟท์แวร์ ไปถึงไหนกันแล้ว แต่ผมเองก็ยังชอบซ่อมแซมดิสต์ด้วยโปรแกรมโบราณๆอย่าง Norton Utilities Version 3 เหมือนเดิม แต่ครานี้ก็ถึงคราวซวยจนได้ เมื่อโปรแกรมได้ตรวจสอบฮาร์ดดิสต์ที่เป็น WinXp ที่ผมเก็บข้อมูลอยู่ (อ้อ ผมบูตจาก Windows 98) ปรากฏว่าชื่อไฟล์ และ นามสกุล บางตัว (ที่เยอะมาก) กลายเป็นตัวใหญ่ (Upper Case) กันเฉยเลย ดูแล้วมันคันเคืองสายตาพิกล แต่ก็จนปัญญา (แบบไม่รู้จริงๆ) ไม่รู้จะหาคำสั่ง หรือ โปรแกรมอะไรที่มันจะแปลงกลับไปเป็นตัวเล็กเหมือนเดิมได้ รำคาญสายตาตัวเองจริงๆ
อย่ากระนั้นเลยเมื่อตัวเราเขียนโปรแกรมเป็น จะช้าอยู่ไย เปิดโปรแกรม Visual Basic ขึ้นมา แล้วก็ลาก Common Control พื้นฐานเข้ามา 4 อัน ประกอบด้วย
DriveListBox - Drive1
DirListBox - Dir1
FileListBox - File1
และ CommandButton อีก 3 ตัว เป็นปุ่มไว้สั่งเปลี่ยนชื่อ Folder กะปุ่มเปลี่ยนชื่อไฟล์ ให้กลายเป็นตัวเล็ก และ ปุ่มจบการทำงาน (อันนี้ไม่รู้จะมาทำไม ... เปลือง)
แบบว่าออกแบบค่อนข้างกึ่งอัตโนมือ เพื่อเลือกรายการเอาน่ะครับ อิอิอิ ก็คือต้องเลือก Folder ที่ต้องการมาก่อนแล้วก็สั่งโปรแกรมให้ Loop เอาทุกๆไฟล์ (หรือ เลือกเพียงไฟล์ๆเดียวก็ได้) เพื่อเปลี่ยนชื่อมันเอาครับ
 ออกแบบฟอร์มแสดงผล
 ดูชื่อไฟล์ กะ นามสกุลแล้วมันอุจาดสายตาซะเหลือเกิน
 ให้คลิ๊กเลือกก่อน เมื่อต้องการเปลี่ยนชื่อเพียงไฟล์เดียว หากไม่เลือกแสดงว่าต้องการเปลี่ยนทั้งโฟลเดอร์
อ้อ ... หากท่าน Run โปรแกรมไม่ได้ กรุณาดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack มาติดตั้งก่อนน่ะครับ
ลองมาดูโค้ดเล็กๆ กันครับ Option Explicit
Private Sub cmdExit_Click() End End Sub
Private Sub cmdUpdateFile_Click() If File1.ListCount > 0 And File1.ListIndex < 0 Then ' ทดสอบว่ามีรายชื่อไฟล์หรือไม่ และ ตรวจสอบว่าไม่มีการกดคลิ๊กเลือกใน FileListBox นั่นคือต้องการเปลี่ยนชื่อทั้งโฟลเดอร์ Call ChangeFile2Lower(Dir1.Path) ' ไปโปรแกรมย่อยที่ให้เปลี่ยนชื่อไฟล์ โดยส่งค่าตำแหน่งปัจจุบันไปด้วย ElseIf Len(Trim(File1.FileName)) <> 0 Then Call ChangeSingleFile2Lower(Dir1.Path, File1.FileName) ' ไปโปรแกรมย่อยที่ให้เปลี่ยนชื่อไฟล์ๆเดียว โดยส่งค่าตำแหน่งปัจจุบัน และ ชื่อไฟล์ที่ต้องการไปด้วย End If
File1.FileName = Dir1.List(Dir1.ListIndex) File1.Refresh End Sub
Private Sub cmdUpdateFolder_Click() Call ChangeFolder2Lower (Dir1.Path) ' ไปโปรแกรมย่อยที่ให้เปลี่ยนชื่อโฟลเดอร์ โดยส่งค่าตำแหน่งปัจจุบันไปด้วย Dir1.Path = Dir1.List(Dir1.ListIndex - 1) Dir1.Refresh End Sub
Private Sub Dir1_Change() File1.FileName = Dir1.List(Dir1.ListIndex) txtPath.Text = Dir1.List(Dir1.ListIndex) End Sub
Private Sub Drive1_Change() Dir1.Path = Drive1.Drive File1.FileName = Dir1.List(Dir1.ListIndex) End Sub
Private Sub Form_Load() txtPath.Text = Dir1.Path File1.FileName = Dir1.List(Dir1.ListIndex) lblFile(1).Caption = "คลิ๊กเลือกไฟล์เมื่อ ต้องการเปลี่ยนชื่อเพียง ไฟล์เดียว" End Sub
Sub ChangeFolder2Lower(FolderSpec) Dim OldFolder$, NewFolder$ OldFolder = FolderSpec ' ชื่อโฟลเดอร์เดิม NewFolder = LCase(FolderSpec) ' ชื่อโฟลเดอร์ใหม่ ด้วยฟังค์ชั่น Lower Case เพื่อแปลงตัวอักษรเป็นตัวเล็ก Name OldFolder As NewFolder End Sub
Sub ChangeSingleFile2Lower(FolderSpec, fName) ' รับค่าตำแหน่งโฟลเดอร์ และ ชื่อไฟล์ Dim OldFileName$, NewFileName$ OldFileName = FolderSpec & "\" & fName NewFileName = FolderSpec & "\" & LCase(fName) Name OldFileName As NewFileName End Sub
Sub ChangeFile2Lower(FolderSpec) Dim fs, f, f1, fc Dim OldFileName$, NewFileName$ Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder(FolderSpec) Set fc = f.Files For Each f1 In fc ' ทำงานไปเรื่อยๆ จนกว่าจะหมดรายชื่อไฟล์ที่มีอยู่ในโฟลเดอร์นั้นๆ OldFileName = FolderSpec & "\" & f1.Name ' ชื่อไฟล์เดิม NewFileName = FolderSpec & "\" & LCase(f1.Name) ' ชื่อไฟล์ใหม่ ด้วยฟังค์ชั่น Lower Case เพื่อแปลงตัวอักษรเป็นตัวเล็ก Name OldFileName As NewFileName ' ใช้คำสั่ง Name เปลี่ยนชื่อเก่าเป็นชื่อใหม่ Next End Sub
แฮะๆๆ เป็นไงครับโปรแกรมเล็กๆ (แต่ไม่กระจอกน่ะ ... ขืนดูถูกแม้กระทั่งงานตัวเอง ก็อย่าหวังว่าคนอื่นเขาจะมาชื่นชมงานของเราเล้ยยยย) อย่างนี่ก็มีประโยชน์ได้เหมือนกัน หากท่านใดรู้วิธีการที่จะให้มันง่ายกว่านี้ โปรดถ่ายทอด บอกต่อๆ กันด้วยน่ะครับ อย่าเก็บงำไว้เพียงลำพังเลยครับ
|