Rename file hàng loạt. Thêm số thứ tự vào cuối file cho từng thư mục riêng biệt

Hello
Mình đang cần rename file đánh số thứ tự vào cuối file cho nhiều thư mục. Với điều kiện số thứ tự đếm cho từng thư mục, chứ không đếm dồn. Mình đã thử 1 số công cụ nhưng toàn đánh số theo kiểu cộng dồn số thứ tự ở các thư mục. 1 số công cụ số thứ tự riêng cho từng thư mục thì lại đổi tên của cả thư mục
Vì đây chỉ là 1 công việc nhỏ trong vấn đề đang giải quyết nên ngại viết tool. Bạn nào biết công cụ nào có thể giải quyết vấn đề này không. thấy trên mạng họ viết file bat rất ngắn gọn thực thi qua command prompt. Nhưng mình không biết ngôn ngữ viết file này :3

Thankyou

1 Like

5 lít có đồ không đụng hàng ::)))

Đùa thôi. Dùng C# mà viết.

4 Likes

Linux thì bash, win thì cmd xử lí ngon vụ này

3 Likes

Hi HelloWorld.
Đơn giản thì cứ python mà chiến.

4 Likes

dùng powershell nhoé

function Suffix-Numbering($Path) {
  $cwd = pwd
  cd $Path
  $i = 1
  ls -File | %{Rename-Item $_ ('{0}_{1:D3}{2}' -f $_.basename, $i++, $_.extension)}
  ls -Directory | %{Suffix-Numbering $_}
  cd $cwd
}

rồi gọi

suffix-numbering path/to/directory

là được

cái này đơn giản, nếu làm kĩ phải thêm kiểm tra xem có path hay ko: (nếu lỡ quên path thì nó chạy đổi tên toàn bộ file trong folder hiện tại…)

  if (!($Path)) {
    Write-Error "Missing path" -Category InvalidArgument -TargetObject $_
    return
  }
  if (!(Test-Path $Path)) {
    Write-Error "Path not found" -Category ObjectNotFound -TargetObject $_
    return
  }

rồi phải thêm -Recurse để có thể chặn recursive call, -Verbose để in ra những file nào bị đổi tên và đổi thành tên gì, -Filter để lọc bớt ví dụ chỉ đổi tên *.png, alias để khỏi mất công gõ nguyên cái function, -Force để kiểm tra xem file đã có number suffix chưa, có rồi thì đừng đánh số thêm, và có lẽ thêm -NumberFormat để custom đánh số 001 hay 0001 v.v… code chùa thì cho vài dòng đơn giản vậy thôi

7 Likes

Em vừa mới tìm được 1 tool rename file (bản rất cũ, các bản mới của phần mềm này đều rename cộng dồn số thứ tự, tên của nó là rename file luôn)
Như e đã nói trên, vì chỉ là 1 công việc nhỏ, giờ ngồi viết tool ngại mà cũng không dùng nhiều :grin:

1 Like

Rất chi tiết và hữu dụng, tks bạn

1 Like

Nó chỉ chạy cho thư mục cd $Path
chứ các thư mục con bên trong $Path k rename được là sao nhỉ

1 Like

có mà, dòng ls -Directory | %{Suffix-Numbering $_} là gọi đệ quy các thư mục con của $Path đó. Code rất đơn giản có 2 dòng thôi mà ko đọc @_@

2 Likes

Hỏi mất nửa ngày thì ngồi 1 tí viết cái là xong cmnr

6 Likes

:3 Thật ra hỏi xong sau 30 không thấy ai tl nên mình đã tìm ra 1 tool làm được rồi :3 Thấy mấy cái script mấy bác trên để lại, xem xem có dùng được gì thì lưu lại mai mốt cần thôi

1 Like

Giết gà dùng dao mổ trâu thế mệt lắm.

1 Like

Tks bạn. Mấy cái script này có vẻ hiệu quả

1 Like

Hì hụi cả ngày cũng đã xong đâu :smile:

Ngoài ra có thể dùng VBS để viết script. Ngày trước có con “virus” tự nhân bản nó vào tất cả các thư mục chắc code giống 80%.
Tham khảo ở đây :

3 Likes

Code trên không biết có vấn đề gì không. Mình rename hơn 20k ảnh, xong có 1 vài ảnh nó tên nó bị nhảy học kiểu
xxx001.jpg
xxx003.jpg

:3 Bạn xem lại hộ mình với. Thử trên 1 vài thư mục với số file ít thì ok, nhưng nhiều quá hơn 20k ảnh nên mình không check hết được :3

1 Like

chắc trong 20k ảnh đó có ảnh .png, nó quét hết các file types chứ ko chỉ riêng .jpg? Tìm xem file xxx002.??? có hay ko @_@, ví dụ
xxx001.jpg
xxx002.png
xxx003.jpg

nếu chỉ muốn đổi tên file .jpg thì chỗ ls -File thêm ls -File *.jpg vô là được, còn muốn đổi tên hết mà đánh số liên tục cho từng kiểu file thì xài Sort-Object

ls -File | Sort-Object -Property extension,basename | %{Rename-Item $_ ('{0}_{1:D3}{2}' -f $_.basename, $i++, $_.extension)}

nó sẽ đánh số là
xxx001.jpg
xxx002.jpg

xxx122.jpg
xxx123.png
xxx124.png

2 Likes

toàn ảnh jpg hết mà, số ảnh là 152 chẳng hạn thì nó đánh nhảy học 1 số, nên tổng số ảnh lên 153, nhưng mình thử lại thì lại được rồi, k biết có phải khi được khi không không @@

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?