Đổi tên nhiều tệp trong một thư mục, thêm tiền tố (Windows)


81

Tôi muốn đổi tên hàng loạt các tệp trong một thư mục, đặt tiền tố tên thư mục thành tên mới. tức là các tệp trong C:\house chores\tất cả sẽ được đổi tên house chores - $old_name.

Câu trả lời:


146

Tùy chọn 1: Sử dụng Windows PowerShell

Mở menu cửa sổ. Nhập: "PowerShell" và mở cửa sổ lệnh 'Windows PowerShell'.

Chuyển thư mục với các tệp mong muốn: ví dụ: cd "C: \ house chores" Lưu ý: địa chỉ phải kết hợp dấu ngoặc kép "" nếu có liên quan đến dấu cách.

Bạn có thể sử dụng 'dir' để xem tất cả các tệp trong thư mục. Sử dụng '|' sẽ chuyển đầu ra của 'dir' cho lệnh sau đó.

Lưu ý: 'dir' là bí danh của 'Get-ChildItem'. Xem: wiki: cmdlets . Người ta có thể cung cấp thêm chức năng. ví dụ: 'dir -recurse' xuất ra tất cả các tệp, thư mục và thư mục con.

Điều gì sẽ xảy ra nếu tôi chỉ muốn một loạt các tệp?

Thay vì 'dir |' Tôi có thể sử dụng:

dir | where-object -filterscript {($_.Name -ge 'DSC_20') -and ($_.Name -le 'DSC_31')} |

Để đổi tên hàng loạt với tên thư mục làm tiền tố:

dir | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}

Tùy chọn 2: Sử dụng Command Prompt

Trong thư mục nhấn shift + nhấp chuột phải: chọn 'mở cửa sổ lệnh tại đây'

for %a in (*.*) do ren "%a" "prefix - %a"

Nếu có nhiều tệp, có thể tốt hơn nếu bạn thêm lệnh '@echo off' vào trước lệnh này và lệnh 'echo on' ở cuối.


1
Nitpick nhỏ: Các @tại @echo onlà không cần thiết. Bạn vừa quay @echo off.
IInspectable

9
Tùy chọn 2 (sau khi thêm một phần bị thiếu do) không hoạt động - sau khi một số tệp đã được đổi tên, hãy fortìm chúng dưới tên mới, thêm tiền tố này nhiều lần cho đến khi đạt đến giới hạn độ dài tên tệp.
Sergey Vlasov

2
khi sử dụng tùy chọn 2 tôi có ren was unexpected at this time.bất kỳ ý tưởng tại sao?
null pointer

4
@billgates Từ đó dobị thiếu trong câu trả lời của anh ấy. nó phải làfor %a in (.) do ren "%a" "prefix - %a"
Christiaan Westerbeek

2
@SergeyVlasov Điều đó xảy ra trong cả hai Tùy chọn. Cách duy nhất để tránh điều đó là đổi tên lên trên bản gốc. Hoặc có thể chuyển nó sang một thư mục khác sau khi đổi tên.
David Starkey

41

Vấn đề với hai câu trả lời Powershell ở đây là tiền tố có thể bị trùng lặp vì tập lệnh sẽ có khả năng chạy qua tệp cả trước và sau khi nó được đổi tên, tùy thuộc vào thư mục được sử dụng khi quá trình đổi tên chạy. Để giải quyết vấn đề này, chỉ cần sử dụng -Excludetùy chọn:

Get-ChildItem -Exclude "house chores-*" | rename-item -NewName { "house chores-" + $_.Name }

Điều này sẽ ngăn quá trình đổi tên bất kỳ một tệp nào nhiều lần.


1
Vui lòng xem xét thêm vào đề xuất của bạn một ví dụ ít cụ thể hơn, bao gồm $ _. Directory.Name
ofer.sheffer

18

Phần mềm miễn phí ' Bulk Rename Utility ' cũng hoạt động tốt (và cũng mạnh mẽ cho các tác vụ nâng cao). Tải xuống và cài đặt mất một phút.

Xem ảnh chụp màn hìnhhướng dẫn trên trang web gốc.

-

Tôi không thể cung cấp ảnh chụp màn hình từng bước vì hình ảnh sẽ phải được phát hành theo Giấy phép Creative Commons và tôi không sở hữu ảnh chụp màn hình của phần mềm.

Tuyên bố từ chối trách nhiệm: Tôi không liên kết với phần mềm / công ty đã nói dưới bất kỳ hình thức nào. Tôi thích sản phẩm cho nhiệm vụ của riêng mình, nó phục vụ các yêu cầu của OP và các yêu cầu tương tự, do đó đề xuất.


Bắt đầu sử dụng nó vào một lúc nào đó. +1 để thêm một cái gì đó vào chủ đề.
ofer.sheffer

@ ofer.sheffer Cảm ơn bạn.

Câu trả lời này nằm ngoài chủ đề! -1
Marco Demaio

1
@MarcoDemaio Cảm ơn bạn đã phản hồi. OP muốn hoàn thành một nhiệm vụ và phần mềm được liên kết giúp bạn thực hiện dễ dàng. Tôi tin rằng, sự phức tạp của giải pháp không làm cho nó phù hợp hơn.

@GopalAggarwal: xin lỗi, bạn nói đúng, tôi đã đọc câu hỏi của anh ấy "Tôi muốn đổi tên hàng loạt tệp trong một thư mục" và tôi nghĩ anh ấy đang tìm kiếm một tệp hàng loạt của Windows. Tôi đã xóa -1 của mình.
Marco Demaio

9

Điều này làm việc với tôi, đầu tiên cd trong thư mục mà bạn muốn thay đổi tên tệp và sau đó chạy lệnh sau:

Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }

5
Điều này gây ra một vòng lặp vô hạn cho đến khi tên tệp đạt đến giới hạn của Windows. Thay vào đó, hãy sử dụng phản hồi của @ Dave.Gugg: stackoverflow.com/a/37279979/2179408
Rob Bell

7

Tôi đang vò đầu bứt tóc vì đối với một số mục, mục đã đổi tên sẽ được đổi tên lần nữa (nhiều lần, trừ khi đạt đến độ dài tên tệp tối đa). Điều này đã xảy ra cho cả Get-ChildItem và đường ống đầu ra của dir. Tôi đoán rằng các tệp đã đổi tên được chọn do sự thay đổi trong thứ tự bảng chữ cái. Tôi đã giải quyết vấn đề này theo cách sau:

Get-ChildItem -Path . -OutVariable dirs
foreach ($i in $dirs) { Rename-Item $i.name ("<MY_PREFIX>"+$i.name) }

Điều này "khóa" kết quả được trả về bởi Get-ChildItem trong biến $ dirs và bạn có thể lặp lại nó mà không sợ thứ tự sẽ thay đổi hoặc việc kinh doanh hài hước khác sẽ xảy ra.

Mẹo sử dụng -Exclude của Dave.Gugg cũng giải quyết được vấn đề này, nhưng đây là một cách tiếp cận khác; có lẽ nếu các tệp được đổi tên đã chứa mẫu được sử dụng trong tiền tố.

(Tuyên bố từ chối trách nhiệm: Tôi rất yêu thích PowerShell n00b.)


2

Dựa trên câu trả lời @ ofer.sheffer, lệnh này sẽ đổi tên hàng loạt và thêm ngày hiện tại vào tên tệp. tức là "file.txt" trở thành "20180329 - file.txt" cho tất cả các tệp trong thư mục hiện tại

for %a in (*.*) do ren "%a" "%date:~-4,4%%date:~-7,2%%date:~-10,2% - %a"

2

Dựa trên câu trả lời @ ofer.sheffer, đây là biến thể CMD để thêm phụ tố (đây không phải là câu hỏi, nhưng trang này vẫn là kết quả số 1 trên google nếu bạn tìm kiếm phụ đề). Nó có một chút khác biệt vì phần mở rộng.

for %a in (*.*) do ren "%~a" "%~na-affix%~xa"

Bạn có thể thay đổi phần "-affix".


0

Tôi biết đó là một câu hỏi cũ nhưng tôi đã học được rất nhiều từ các câu trả lời khác nhau nhưng đã tìm ra giải pháp của riêng mình dưới dạng một hàm. Thao tác này sẽ tự động thêm thư mục mẹ làm tiền tố vào tất cả các tệp phù hợp với một mẫu nhất định nhưng chỉ khi nó chưa có tiền tố đó.

function Add-DirectoryPrefix($pattern) {
    # To debug, replace the Rename-Item with Select-Object
    Get-ChildItem -Path .\* -Filter $pattern -Recurse | 
        Where-Object {$_.Name -notlike ($_.Directory.Name + '*')} | 
        Rename-Item -NewName {$_.Directory.Name + '-' + $_.Name}
        # Select-Object -Property Directory,Name,@{Name = 'NewName'; Expression= {$_.Directory.Name + '-' + $_.Name}}
}

https://gist.github.com/kmpm/4f94e46e569ae0a4e688581231fa9e00

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.