Cần hỗ trợ tạo một tệp bó để đổi tên nhiều thư mục


0

Tôi có hơn 12.000 thư mục mà tôi muốn đổi tên với 12 ký tự đầu tiên của tệp đầu tiên bên trong mỗi thư mục. Ví dụ: tôi có một thư mục có tên "1" nhưng bên trong có một số tệp PDF và tệp đầu tiên được liệt kê có tên tệp là "201405090360.pdf" Tôi muốn thư mục được đổi tên, "201405090360" có khả thi không?


1
Có phải tất cả các thư mục con của một thư mục hoặc chúng ta đang nói về một cấu trúc thư mục phức tạp ở đây? Đầu tiên được liệt kê như trong bảng chữ cái?
bất cứ điều gì

Hiện tại các thư mục được đặt trên một ổ đĩa ngoài, sau đó cấu trúc có một vài thư mục khác trước khi bạn đến các thư mục mà tôi muốn đổi tên trông như thế này: Máy tính> Sách của tôi (F :)> Báo cáo cảnh sát> Tệp đính kèm trường hợp> 57 Một số các thư mục này chứa một tệp PDF trong khi các thư mục khác chứa nhiều tệp PDF, nhưng tất cả các tệp bên trong bắt đầu có cùng 12 ký tự. Chúng dường như được sắp xếp theo thứ tự bảng chữ cái
SPChris

Điều này sẽ giúp bạn đi: pastebin.com/0Qr9ksME Lưu ý: blnDoIt được đặt thành false để nó sẽ không thực hiện bất kỳ thay đổi nào cho đến khi bạn thay đổi thành đúng. Điều này sẽ cho phép bạn kiểm tra nó đầu tiên. Để chạy, chỉnh sửa strPath thành tên thư mục cấp cao nhất, vbscript được tham chiếu phải nằm trong cùng thư mục, lưu nó dưới dạng script.vbs chẳng hạn. Sau đó chạy trong một dấu nhắc lệnh quản trị cscript script.vbs > log.txthy vọng tệp nhật ký có kết quả mà bạn mong đợi.
HelpingHand

Vui vì nó đã giúp. Ví dụ Powershell của @whthing cũng có vẻ như nó sẽ hoạt động và nó kiểm tra rằng có một tệp mỗi thư mục sẽ sử dụng.
HelpingHand

@HelpingHand có thể đăng mã dưới dạng câu trả lời ở đây để SPChris có thể đánh dấu nó là câu trả lời được chấp nhận?
bất cứ điều gì

Câu trả lời:


1

Sau đây đã được thừa nhận là đã giúp đỡ. Nó có thể được cải thiện với nhiều xử lý lỗi hơn nhưng nên thực hiện công việc hoặc được sử dụng làm điểm khởi đầu cho một kịch bản hoàn chỉnh hơn.

Ghi chú:

Tập lệnh VBScript phải nằm trong cùng thư mục với thư mục mẹ theo chế độ xem dạng cây bên dưới.

Biến strPath ở trên cùng nên được thay đổi thành tên của thư mục mẹ, tức là thay đổi từ "Bắt đầu"

Thay đổi blnDoIt từ false thành true để thực sự thay đổi.

Đề xuất chạy nó trước như sau: cscript process.vbs> log.txt

Nếu tệp nhật ký có vẻ chính xác, hãy thay đổi blnDoIt thành true.

' Given this structure:
'
'│   process.vbs
'│
'└───Start
'    ├───1
'    │       123456789012aaa.txt
'    │       123456789013bbb.txt
'    │
'    ├───2
'    │       223456789012ccc.txt
'    │       223456789013ddd.txt
'    │
'    ├───3
'    │       323456789012eee.txt
'    │       323456789013fff.txt
'    │
'    ├───4
'    │       423456789012ggg.txt
'    │       423456789013hhh.txt
'    │
'    ├───5
'    │       523456789012iii.txt
'    │       523456789013jjj.txt
'    │
'    └───6
'            623456789013kkk.txt
'            623456789012jjj.txt

'===================================================================================    

dim strPath : strPath = "Start"
dim blnDoIt : blnDoIt = false

'===================================================================================
dim objFSO                  : set objFSO = CreateObject("Scripting.FileSystemObject")
dim objFolder               : set objFolder = objFSO.GetFolder(strPath)
dim strPGetAbsolutePathName : strPGetAbsolutePathName = objFSO.GetAbsolutePathName(strPath)
dim colSubfolders           : set colSubfolders = objFolder.Subfolders

'===================================================================================
for each objSubfolder in colSubfolders
    strNameOfFolder = objSubfolder.Name

    wscript.echo "Processing directory: " & strNameOfFolder
    strFileNameToUse = GetFileNameToUseAsParentDir (strNameOfFolder)

    if strFileNameToUse <> -1 then

      wscript.echo " > Chosen file to represent directory: " & strFileNameToUse
      strLeft12 = left (strFileNameToUse, 12)
      wscript.echo " > First 12 characters of file: " & strLeft12

      if blnDoIt then
        wscript.echo " > Renaming directory " & strPGetAbsolutePathName & "\" & strNameOfFolder & " to " & strPGetAbsolutePathName & "\" & strLeft12
        objFSO.MoveFolder strPGetAbsolutePathName & "\" & strNameOfFolder, strPGetAbsolutePathName & "\" & strLeft12
      else
        wscript.echo " > Rename directory " & strPGetAbsolutePathName & "\" & strNameOfFolder & " to " & strPGetAbsolutePathName & "\" & strLeft12
      end if

    else
    wscript.echo " > Skipping."
    end if

    wscript.echo ""
next
'===================================================================================

'===================================================================================
Function GetFileNameToUseAsParentDir(strDir)

    dim oFiles : Set oFiles = CreateObject("System.Collections.ArrayList")

    dim oF : set oF = objFSO.GetFolder(strPGetAbsolutePathName & "\" & strDir).Files

    wscript.echo " > " & oF.count & " files in directory."

    if oF.count > 0 then

      for each oFile In oF
        oFiles.Add oFile.name
      next

      oFiles.Sort

      GetFileNameToUseAsParentDir = oFiles(0)

    else
      GetFileNameToUseAsParentDir = -1
    end if

    set oFiles = nothing

End Function
'===================================================================================

0

Tôi sẽ sử dụng Powershell. Nếu tôi hiểu chính xác thông số kỹ thuật của bạn, điều này sẽ thực hiện công việc:

# Get List of subfolders
$Folders = Get-ChildItem <FOLDER> -Directory
# Process each subfolder
Foreach ($Subfolder in $Folders){
     # Get the names all files in current subfolder
     $FileNames = (Get-ChildItem $Subfolder.FullName -File).Name
     # If folder was not empty
     if ($FileNames) {
         # Replace current name of folder with first 12 chars of the name of the first file 
         Rename-Item $Subfolder.FullName $FileNames[0].Substring(0,12) -WhatIf
    }
}

Thay thế bằng thư mục thực của bạn, lưu dưới dạng tệp * .ps1, mở một quyền hạn và chạy.

Sẽ chỉ hiển thị kết quả, không thay đổi bất cứ điều gì cho đến khi bạn xóa "-Wifif" từ dòng thứ ba từ dưới lên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.