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
.
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:
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.
do
) không hoạt động - sau khi một số tệp đã được đổi tên, hãy for
tì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.
ren was unexpected at this time.
bất kỳ ý tưởng tại sao?
do
bị thiếu trong câu trả lời của anh ấy. nó phải làfor %a in (.) do ren "%a" "prefix - %a"
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 -Exclude
tù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.
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ình và hướ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.
Đ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 }
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.)
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".
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
@
tại@echo on
là không cần thiết. Bạn vừa quay@echo off
.