1 Làm cách nào để sử dụng VBScript để đổi tên tệp trong thư mục chuẩn bị tên thư mục cho tất cả các tệp trong thư mục?

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi có một số lượng lớn tệp hình ảnh kéo dài gần hai thập kỷ, trong đó đối tượng được xác định bằng tên thư mục và hầu hết các ảnh đều có tên chung tuy nhiên một số trong số chúng có tên cụ thể hơn. Tôi đang viết một tập lệnh để thêm tên thư mục vào tên tệp cho tất cả các tệp trong một thư mục cụ thể. Vâng, tôi đang cố gắng ít nhất. Đã được một vài năm kể từ khi tôi sử dụng VBScript và có vẻ như tôi rất RẤT gỉ. Tôi đang đối mặt với những thách thức với định dạng cú pháp.

. ) . dòng Bắt đầu của tệp đã thêm)

Tôi đã dành vài giờ để tìm hiểu các nguyên nhân có thể nhưng không có kết quả và vì vậy tôi chuyển sang cộng đồng để được giúp định dạng chính xác tập lệnh này.

Mọi nhận xét về cách tiếp cận tập lệnh tốt hơn để hoàn thành nhiệm vụ này cũng sẽ được đánh giá cao.

Tôi sẽ đặt toàn bộ mã cho tệp vì tôi không biết phần nào trong đó sẽ là khía cạnh liên quan.

Trong mã, hiện tại, nó được đặt thành chỉ tạo một hộp thông báo cho mỗi tệp dưới dạng thước đo kiểm tra để đảm bảo các biến có các giá trị mà tôi nghĩ rằng chúng có. Mã nhận xét để đổi tên tập tin là mục đích thực sự có chủ đích. Tôi bị mắc kẹt về định dạng thích hợp của phần đầu tiên của tập tin. Nói chung, tôi đang thực hiện điều này từ dòng lệnh bằng cách sử dụng: cscript.exe c: \MyTools \addDir2FileName.vbs

Tôi đã khởi chạy nó thông qua windows explorer để lấy mã lỗi cụ thể hơn với số dòng mặc dù.

Tôi đã thêm nhận xét Bắt đầu tệp và Kết thúc tệp chỉ nhằm mục đích rõ ràng trong bài đăng này.

' ####### Beginning of File
' Renames all files in a directory prepending the directory name to the file name

Imports System
Imports System.IO

Option Explicit

Dim WshShell, strOldFull, strNewFull, strFullPath, strCurDir
Dim strCurrentName, strNewName, strMessage, dir, fileObj, fs, fo

' Get the current directory
Set WshShell = CreateObject("WScript.Shell")
strFullPath = WshShell.CurrentDirectory

'Get folder properties to get just the name without path
Set fs=Server.CreateObject("Scripting.FileSystemObject")
Set fo=fs.GetFolder(strFullPath)

strCurDir = fo.Name

'Iterate through the directory
set dir = DirectoryInfo(strFullPath)

For Each fileObj In dir.GetFiles()
  strCurrentName = fileObj.Name
  strNewName = strCurDir & " - " & strCurrentName

  ' For testing purposes to make sure everything is as expected
  ' Creates a message box for each file instead of actually renaming it
  strMessage = "Old Name: " & strCurrentName & chr(13) & chr(10) & "New Name: " & strNewName 
  MsgBox strMessage

  ' Renaming the file
  ' strOldFull =  fs.BuildPath(CurrentDirectory, strCurrentName)
  ' strNewFull = fs.BuildPath(CurrentDirectory, strNewName)
  ' My.Computer.FileSystem.RenameFile(strOldFull, strNewFull)

Next

WshShell = Nothing
fo = Nothing
fs = Nothing

' ### End of File

Kỳ vọng là một tệp "C: \Pictures \Trip to Nice \DCM001.jpg" sẽ được đổi tên thành "C: \Pictures \Trip to Nice \Trip to Nice - DCM001.jpg" và tất cả các tệp trong thư mục mà tập lệnh được chạy sẽ được đổi tên tương tự. Chà, chính xác hơn, đầu ra như được định dạng hiện tại sẽ tạo ra một hộp thông báo có tên "Tên cũ: C: \Pictures \Trip to Nice \DCM001.jpg Tên mới: C: \Pictures \Trip to Nice \Trip to Nice - DCM001.jpg "và một hộp thông báo sẽ được tạo cho tất cả các tệp trong thư mục. Có, tôi sẽ chỉ chạy phiên bản hộp thông báo trong một thư mục thử nghiệm với 3 tệp. Tôi ghét nhận được 50.000 hộp tin nhắn, lol.

Hiện tại không có đầu ra do các vấn đề định dạng với Tuyên bố nhập khẩu hoặc Thông báo tùy chọn hoặc có lẽ một số phần cú pháp khác tôi bị thiếu hoặc có sai.

Cảm ơn bạn đã dành thời gian và bất kỳ trợ giúp nào mà bất kỳ ai cũng có thể cung cấp. Đây là lần đầu tiên tôi đăng bài lên cộng đồng nhưng từ lâu tôi đã đánh giá cao những câu trả lời được cung cấp. Thông thường, tôi có thể tìm thấy câu hỏi của mình đã được trả lời, nhưng tôi lại bối rối về câu hỏi này ...

    
0
  1. Các câu lệnh Imports không phải là cú pháp VBScript hợp lệ.
    2019-05-09 03: 36: 33Z
  2. Bản sao có thể có của Nhập không khớp: Nhập trong vbs
    2019-05-09 03: 40: 44Z
1 Câu trả lời                              1                         

Được rồi, qua rất nhiều thử nghiệm và lỗi, tôi đã tìm ra một phương pháp để hoàn thành nhiệm vụ mà tôi không sử dụng Hệ thống và do đó tránh được lỗi mà tôi đã nhận được trước đó. Tôi nghĩ sẽ đăng kịch bản cuối cùng, trong trường hợp có ai quan tâm.

' Renames all files in a directory prepending the directory name to the file name
Option Explicit

Dim WshShell, strOldFull, strFullPath, strCurDir, lastSlash
Dim strCurrentName, strNewName, strMessage, fileObj, fileSpec, fs, fo, ff

' Get the current directory
Set WshShell = CreateObject("WScript.Shell")
strFullPath = WshShell.CurrentDirectory

'Get folder object 
Set fs = CreateObject("Scripting.FileSystemObject")
Set fo = fs.GetFolder(strFullPath)
set ff = fo.Files

'Get just the folder name
lastSlash = inStrRev(strFullPath, "\")
strCurDir = right(strFullPath, len(strFullPath) - lastSlash )


'Iterate through the directory
For Each fileObj in ff
  strCurrentName = fileObj.Name
  strNewName = strCurDir & " - " & strCurrentName

  ' For testing purposes to make sure everything is as expected
  ' Creates a message box for each file instead of actually renaming it
  ' strMessage = "Old Name: " & strCurrentName & chr(13) & chr(10) & "New Name: " & strNewName 
  ' MsgBox strMessage

  ' Renaming the file
  strOldFull =  strFullPath & "\" & strCurrentName
  set fileSpec = fs.GetFile(strOldFull)
  fileSpec.Name = strNewName

Next
    
0
2019-05-08 19: 17: 59Z
nguồn đặt đây