Windows CMD: Thêm Suffix vào tất cả các tệp trong thư mục


4

Tôi có một thư mục với 120 .cstập tin.

Những gì tôi cần làm là thêm "DO" vào mỗi tên tệp, trước phần mở rộng.

Đây là những gì tôi đã đưa ra:

ren *.cs *. //this removes all file extensions
ren *.* *DO.cs // this should rename all the files and add the suffixes

Bây giờ, điều này hoạt động chủ yếu. Nhưng không phải cho một số tập tin.

Ban đầu, tôi nghĩ rằng đó chỉ là các tập tin bắt đầu bằng Do

Nhưng ... chà, đây là cách nó bật ra:

xem thư mục

(Phần còn lại không có trên màn hình in là tốt)

Bây giờ đây không phải là một vấn đề nghiêm trọng; id chỉ muốn hiểu tại sao nó làm điều này ...

Có đầu ra cmd của tôi: đầu ra cmd

Nhìn vào đầu ra này, tôi nghĩ có lẽ nó không thể tìm thấy các tập tin vì lệnh thứ hai bao gồm . cho việc đổi tên; nhưng vì không có tệp nào trong thư mục có phần mở rộng tệp tại thời điểm đổi tên; không thể nào ..

Cảm ơn


1
chỉ là một phỏng đoán, nhưng những cái tên ngắn có thể sẽ can thiệp vào đây (xem superuser.com/questions/485874/ mẹo ).
wmz


@ LưuViênPhúc đây là câu trả lời chính xác đã được đăng một centimet trên bình luận của bạn .. không hữu ích.
Bậc thầy Azazel

@MasterAzazel đây không phải là một câu trả lời và nhận xét ở trên tôi cũng vậy. Điều đó không rõ ràng vì vậy tôi đã không nhìn vào liên kết của anh ấy và không biết rằng nó đã được đăng trước đó. Nó không hữu ích vì bạn đã không đọc nó
phuclv

Trả lời / câu hỏi gọi nó bất cứ điều gì bạn muốn; vẫn là liên kết tương tự. và thực sự tôi đã đọc nó. đó là lý do tại sao người đầu tiên đăng nó nhận được sự ủng hộ từ tôi.
Master Azazel

Câu trả lời:


5

Như những người khác đã nói, nó nằm trong cách rendiễn giải các ký tự đại diện, đó là lý do tại sao nó không thể tìm thấy các tệp có dấu chấm *.*trong lệnh thứ hai, bởi vì:

  • Bạn không chỉ xóa phần mở rộng tập tin bằng lệnh đầu tiên, mà còn chấm trước phần mở rộng:

Artikelnummer.cs > Artikelnummer

  • Và lệnh thứ hai của bạn đang tìm kiếm tên tệp chứa .(không có tên nào!):

ren *.*

  • Cũng xem xét việc rensử dụng *để chỉ tên tệp, vì vậy khi bạn tìm kiếm *.*(bất kỳ tên, bất kỳ tiện ích mở rộng nào) bạn đang sử dụng *để tham chiếu tên tệp và tiện ích mở rộng cùng một lúc, điều này gây nhầm lẫn cho renlệnh!

Vì vậy, kết luận là, vấn đề duy nhất là *.*, thay thế nó bằng *:

ren *.cs *.DO.cs
ren * *DO.cs

Tuy nhiên, nếu bạn muốn đổi tên bằng cách chạy một dòng mã:

Từ một dấu nhắc lệnh chạy:

for /f "tokens=* delims=" %a in ('dir /b "%FilesLocation%"') do if %~xa EQU .cs ren "%a" "%~naDO.cs"

Hoặc lưu và chạy tập lệnh này:

@echo off
for /f "tokens=* delims=" %%a in ('dir /b "%FilesLocation%"') do if %%~xa EQU .cs ren "%%a" "%%~naDO.cs"

Và đừng quên thay đổi %FilesLocation%với giá trị thực của nó.


cảm ơn đã làm rõ sẽ không đổi tên tất cả mọi thứ thành .DO.cs? những gì tôi cần làxyDO.cs
Master Azazel

Cập nhật câu trả lời của tôi, xem nếu nó hoạt động.
NetwOrchestration

không có cách nào để làm điều này bằng cách sử dụng lệnh ren?
Master Azazel

Đó là một renlệnh bên trong một forvòng lặp. Nhưng nếu bạn có nghĩa là renlệnh JUST , tôi đã cập nhật toàn bộ câu trả lời của mình.
NetwOrchestration

0

Những gì bạn cần là lệnh for. Ngoài đỉnh đầu của tôi, nó đi như thế này:

for /f "tokens=1,2* delims=." %a in ('dir *.cs /b') do (ren %a.%b %aDO.%b)

Điều này không hoạt động đối với tên tệp có nhiều hơn một điểm.


tôi biết có những cách khác để làm điều đó; nhưng tôi tự hỏi tại sao nó lại hành động như nó đã làm theo cách tôi đã cố gắng làm
Master Azazel

Ah, tôi hiểu ý của bạn. Có lẽ ren . hành động trên các tập tin theo một thứ tự khác nhau.
jon_two
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.