2013-08-18 33 views
8

Tôi đã tìm thấy một số câu trả lời trên trang web này về cách đổi tên tệp trong Powershell vì vậy tôi xin lỗi nếu đây là lặp lại. Tôi đã dành 5 giờ tốt trên google và các trang web khác nhau đang cố gắng tìm ra điều này. Tôi thực sự đã cố gắng giải thích điều này. Tôi không phải là một lập trình viên chỉ là một người tỉ mỉ về việc nộp đơn của họ.Đổi tên hàng loạt các tệp trong PowerShell với hậu tố số liên tiếp

Tôi có 14.000 ảnh được sắp xếp thành tệp theo năm và tháng nhưng được chụp bằng nhiều máy ảnh và tôi muốn tên tệp phản ánh ngày được chụp. Ví dụ: hình ảnh ngày 16 tháng 10 năm 1998 nằm trong một thư mục có tên là 1998 \ 10 tháng 10 \ 19981016. Tôi muốn tất cả các hình ảnh được đặt tên là 19981016_0001 19981016_0002 v.v. Tôi đã thử nhiều đề xuất nhưng nó không hoạt động. Có lẽ do tôi thiếu kiến ​​thức lập trình haha. Ai đó có thể giúp tôi và đưa cho tôi những chỉ dẫn giả? Tôi có thể đến điểm mà nó liệt kê thư mục tôi muốn thay đổi nhưng tôi không thể thay đổi nó. Tất cả các hình ảnh của tôi là .jpg. Tôi đã cố gắng đính kèm một ảnh chụp màn hình của những gì tôi đã làm nhưng tiếc là tôi không thể vì tôi quá mới ở đây. Cảm ơn trước!

Tôi đã tạo một tệp tạm thời của các bản sao trong trường hợp tôi đã làm hỏng nó. Tôi bắt đầu bằng cách nhập cd "C:\Documents and Settings\Brooke LastName\Desktop\Temp" sau đó sau khi tải tệp thành công, tôi đã sử dụng công thức mà tôi tìm thấy trên diễn đàn này.

ls *jpg | Foreach {$i=1} {Rename-Item _ -NewName ("$($.19981016){0:00000000#} .jpg" -f $i++) -whatif} 

Các lỗi tôi đã nói

Unexpected token ' .19981016' in expression or statement. 

At line:1 char:12 + $.19981016 <<<< 

Các lỗi lặp đi lặp lại nhiều lần.

Tôi đã tìm thấy một số công thức trên web nhưng hầu hết các tệp được tạo sẽ được đánh số bằng dấu ngoặc đơn ví dụ: kỳ nghỉ (1) .jpg. Tôi muốn có một bộ đếm bốn chữ số sau dấu gạch dưới vào cuối ngày của tôi, ví dụ: 19981016_0001

Trả lời

22

Cú pháp là cách tắt. Một vài vấn đề:

  • Tôi không chắc chắn những gì $($.19981016) được dự định để sản xuất, nhưng $() đánh giá biểu thức trong ngoặc đơn và nội suy kết quả vào chuỗi, và bạn nhận được lỗi vì $.19981016 không phải là một biểu thức hợp lệ. Lỗi sẽ được lặp lại cho mỗi tệp .jpg trong thư mục.
  • {0:00000000#} trong chuỗi được định dạng sẽ tạo số không có 9 chữ số, nhưng cách ngắn hơn để làm điều đó là {0:D9}. Tuy nhiên, tôi nghĩ bạn muốn số không có đệm có 4 chữ số, vì vậy phải là {0:0000#} hoặc {0:D4}.
  • Tôi không chắc chắn những gì Foreach {$i=1} { [...] là nghĩa vụ phải làm. Từ khóa foreach có thể có nghĩa là foreach vòng lặp hoặc có thể viết tắt cho Foreach-Object. Trong bối cảnh này, nhận đầu vào từ một đường ống, nó nhất thiết phải là thứ hai, nhưng cú pháp này là không chính xác theo cách nào.

này sẽ làm những gì bạn muốn, nếu tôi hiểu được mô tả một cách chính xác:

$i = 1 
Get-ChildItem *.jpg | %{Rename-Item $_ -NewName ('19981016_{0:D4}.jpg' -f $i++)} 

Các tên tập tin sẽ 19981016_0001.jpg, 19981016_0002.jpg, 19981016_0003.jpg vv

Một vài lưu ý:

  • Bạn nói rằng bạn muốn tên tập tin như 19981016_0001, nhưng tôi giả sử bạn muốn giữ lại phần mở rộng .jpg.
  • Bạn cần phải khởi tạo $ i, nếu không nó sẽ bắt đầu từ 0 nếu nó chưa được xác định, hoặc tệ hơn nữa, từ một số số khác nếu $ i đã được sử dụng trước đây trong phiên PowerShell cùng. Ví dụ, nếu bạn có 1432 file .jpg trong thư mục, và bạn hãy chạy lệnh đầu tiên với -WhatIf, và sau đó chạy nó thật, các con số sẽ bắt đầu từ 1432.
  • $ i ++ increments $ i bằng 1. Tuy nhiên, nếu bạn đang sử dụng nó làm giá trị, nó sẽ tăng sau giá trị được đọc; đó là lý do tại sao nếu $ i là undefined, nó sẽ bắt đầu từ 0.
  • Get-ChildItem cũng giống như ls. Tôi đã sử dụng tên PowerShell bản xứ, nhưng chúng hoán đổi cho nhau (ls, dirGCI đều bí danh cho Get-ChildItem).
  • % {} là viết tắt cho Foreach-Object
+0

Cảm ơn bạn rất nhiều! Nó hoạt động hoàn hảo. – Brooke

+0

Nếu điều này giải quyết được vấn đề của bạn, vui lòng đánh dấu câu trả lời là được chấp nhận bằng cách nhấp vào dấu kiểm rỗng ở bên trái của câu trả lời (nó chuyển sang màu xanh lục khi được nhấp). –

+0

Rất hữu ích! Cảm ơn bạn đã biết chi tiết .. Bạn có thể tìm thấy tài liệu hoàn chỉnh ở đâu? :/Tôi không thể tìm thấy bài viết chính xác nhưng chủ đề này, cảm ơn bạn! – Stphane

Các vấn đề liên quan