Câu hỏi đổi tên tệp hàng loạt bằng các số để sắp xếp theo thứ tự bảng chữ cái


Tôi muốn đổi tên hàng loạt các tập tin chứa số, đệm các số bằng số không. Mục tiêu là sắp xếp các tập hợp số tệp theo thứ tự bảng chữ cái theo đúng thứ tự trong bất kỳ ứng dụng nào.

Trong một tập hợp các tệp có cùng văn bản tiền tố được theo sau bởi một số, tôi muốn ghi mỗi số bằng số lượng 0 khi số cao nhất có chữ số.

I.e danh sách các tệp có tên như sau:

xx 1 abc.txt
xx 2 def.txt
xx 3 ghi.txt
xx 3.5 jkl.txt
xx 4a mno.txt
xx 4b pqr.txt
...
xx 100 end.txt

nên trở thành:

xx 001 abc.txt
xx 002 def.txt
xx 003 ghi.txt
xx 003.5 jkl.txt
xx 004a mno.txt
xx 004b pqr.txt
...
xx 100 end.txt

(Hệ thống là Windows XP)

(Windows Explorer sử dụng một số loại heuristic để sắp xếp các tệp có số theo cách này, không phải lúc nào cũng chính xác. Tuy nhiên, tôi đang tìm cách để thực sự đổi tên Tập tài liệu)

Phụ lục

Tôi đã được nhắc đến câu hỏi này như một bản sao có thể có: Làm thế nào tôi có thể đổi tên tập tin? Các công cụ được đề cập ở đó (Bulk Rename Utility, AntRenamer, Free Commander Portable vv) đều có thể cho biết không có khả năng phát hiện số lượng paddding tối thiểu cần thiết cho mỗi bộ tệp.

Suy nghĩ của tôi là: Explorer có khả năng phát hiện tệp với các số liên tiếp, ngay cả khi chúng được căn trái mà không có đệm, như trong ví dụ đầu tiên của tôi ở trên. Nó sử dụng phát hiện này để sắp xếp các tệp một cách chính xác.
(xem ví dụ http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html )
Tôi đang tìm một công cụ thực hiện cùng một phát hiện, nhưng cũng đổi tên các tệp tương ứng.
(Tìm số lớn nhất cho mỗi tập hợp các tập tin liên quan, không đơn giản là số lớn nhất trong toàn bộ thư mục, và sau đó đệm các số trong mỗi bộ.)

Hoặc để đặt nó theo cách khác: Tôi muốn thực hiện "sắp xếp tự nhiên" cho tất cả các tệp trong một thư mục, sau đó đổi tên chúng để sắp xếp ascii giống với "sắp xếp tự nhiên"

Tôi bây giờ nghi ngờ rằng không có công cụ có khả năng làm điều này, vì vậy tôi có lẽ chỉ cần viết một kịch bản.


2
2017-07-13 22:19


gốc


Bạn luôn có thể viết một chương trình hoặc một kịch bản cho việc này. Cá nhân tôi sử dụng Python. - James T Snell
Điều này có thể dễ dàng đạt được nếu bạn đang sử dụng * nix. Đối với Windows, bạn sẽ phải cài đặt một môi trường để chạy một số tập lệnh, trừ khi một số chuyên gia dơi thấy trang này ... - billc.cn
Powershell. Âm thanh quá phức tạp đối với một người đổi số lượng lớn. - viking
Tại sao một nhóm renamer (GUI, không phải tập lệnh) hoạt động? Nếu tôi hiểu chính xác, bạn chỉ cần chèn hai số không cho các số nhỏ hơn 10, hoặc một số không cho các số nhỏ hơn 100. Hai bước có thể không dễ dàng như một, nhưng nó vẫn có vẻ khá dễ dàng để thực hiện. - Nicholas Cole


Các câu trả lời:


Điều này sẽ làm việc ở cấp độ cơ bản của nó. Tạo một bản sao lưu trước!

cd vào dir chứa các tệp: 99999 - description.txt

perl rename-pad.pl

#!/usr/bin/perl
opendir(DIR, ".");
@files = sort(grep(/txt$/i, readdir(DIR)));
closedir(DIR);

$len=0;
foreach $file (@files) {
    print $file."\n";
    if ($file=~/xx (\d+)(.*\.txt)$/i) {
        $len=(length($1)>$len)?length($1):$len;
    }
}
foreach $file (@files) {
    if ($file=~/xx (\d+)(.*\.txt)$/i) {
        $newfile=sprintf("%0${len}d%s", $1, $2);
        rename("$file", "$newfile");
    }
}

0
2017-07-25 03:30



Tôi thấy rằng các tiêu chí khác nhau ở đây so với các chủ đề khác. Chỉ cần chơi với regexps cho đến khi nó hoạt động. - Andy Lee Robinson