Có cách nào để đổi tên tập tin thành chữ thường không?


62

Tôi cần một cách để đổi tên tất cả các tệp trong thư mục và thư mục con thành chữ thường.

Tôi muốn biết liệu có cách nào để làm điều đó chỉ bằng các cửa sổ (XP hoặc 7)


cửa sổ không phân biệt giữa mũ nhỏ và mũ trên như unix. có lẽ, nếu bạn nói, tại sao bạn cần điều này, nó sẽ giúp giải quyết vấn đề.
Rook

1
@Idigas. Xin lỗi, nhưng kể từ NTFS, tên tệp đã được phân biệt chữ hoa chữ thường. Xem support.microsoft.com/kb/100625
DaveParillo

Tuyệt vời Lấy một ý tưởng tồi và lan truyền nó hơn nữa. Thật là một cơn ác mộng hỗ trợ khi ai đó gửi một tập tin và một lỗi ngón tay mập có nghĩa là họ đã gửi "answer.dat" và quá trình đến mong đợi "answer.dat". Không có lý do chính đáng nào để hai cái tên đó được coi là "khác biệt".
David

2
@David, ví dụ Java thực sự yêu cầu tên tệp phân biệt chữ hoa chữ thường. Điều đó có thể mang lại rất nhiều rắc rối trên các hệ thống tệp không phân biệt chữ hoa chữ thường.
Arjan

10
Tôi biết điều này đã cũ, nhưng tôi muốn làm rõ một quan niệm sai lầm ở đây. Trong khi NTFS hỗ trợ phân biệt chữ hoa chữ thường, HĐH Windows KHÔNG phân biệt!
địa lý

Câu trả lời:


119

Đi đến thư mục và chạy lệnh sau:

for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")

Đây là sự cố trong trường hợp ai đó muốn sửa đổi / cải thiện:

  • for /f - Đối với mỗi dòng
  • "Tokens=*" - Xử lý từng mục trong mỗi dòng.
  • %f in (...)- %flà tên biến của bạn cho mỗi mục.
  • dir - liệt kê mọi tập tin và thư mục con trong một thư mục.
  • /l- (tham số cho dir) Sử dụng chữ thường.
  • /b- (tham số cho dir) Sử dụng định dạng trần, chỉ tên tệp / thư mục, không có kích thước, không có tiêu đề.
  • /a-d- (tham số cho dir) Đừng không liệt kê các thư mục . ( aviết tắt của attribute, -viết tắt notdviết tắt của directory) .
  • rename "%f" "%f"- đổi tên tập tin với tên riêng của nó, thực sự bị hạ thấp bởi dirlệnh và /lkết hợp.

7
Phiên bản đệ quy: for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")(đã thêm / r vào dir).
Sawny

3
điều này thật tuyệt vời
Shir Gans

4
Phiên bản đệ quy không hoạt động đối với tôi - đổi tên đã phàn nàn về lệnh có định dạng không hợp lệ. Hóa ra / s khiến tệp thứ hai được liệt kê là một đường dẫn tuyệt đối và sử dụng mở rộng tên tệp (% ~ nxf) đã cho tôi tên tệp gốc, chữ hoa. Kết thúc chỉ là đệ quy thủ công.
Dogmatixed

3
Đây là một câu trả lời rất hay; đến mức, không cần chương trình bên ngoài, lệnh đẹp và nhỏ, không cần tệp bó phức tạp.
Jeff Wilbert

2
Nó có thể được sửa đổi để thay đổi chữ thường thành chữ hoa không?
Chucky

18

spacetornado Renamer là một chương trình Windows đổi tên số lượng lớn tệp theo lô. Bạn có thể tìm kiếm và thay thế văn bản, xóa một số ký tự nhất định, thay đổi chữ hoa thành chữ thường, chữ hoa hoặc chữ cái đầu tiên và thêm văn bản vào đầu hoặc cuối (nối / thêm) của mỗi tên tệp

nhập mô tả hình ảnh ở đây


1
Xin vui lòng cho tôi lý do để bỏ phiếu?
joe

5
Mọi người hiếm khi giải thích, thật không may: /
Gnoupi

7
Tôi đoán downvote là vì OP muốn một giải pháp hoạt động mà không cần bất kỳ phần mềm bổ sung nào. Và tôi đoán rằng downvote đã không được giải thích bởi vì một số người có xu hướng giải quyết các downvote trả thù.
innaM

GUI có một chút thú vị nhưng nó hoạt động tốt hơn so với một số công cụ đổi mới khác mà tôi đã thấy ngoài kia.
jcollum

1
Nó đã làm những gì nó đã làm, khi tôi cần đổi tên đệ quy để dọn dẹp các tệp từ máy chủ FTP của Linux ... tuy nhiên, cần phải chạy nó với tư cách Quản trị viên trước khi nó hoạt động bình thường. Cảm thấy như một chương trình cũ không được bảo trì :)
Nelson

11

Vì Windows 7, bạn có thể sử dụng PowerShell cho các tác vụ đó

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}

- Chọn thư mục gốc của bạn
- tất cả các tệp trong thư mục gốc và thư mục con được đổi tên
- tên thư mục được loại trừ với Where {-Not $_.PSIsContainer} |


7

Dưới đây là một giải pháp dòng lệnh đệ quy thích hợp chỉ sử dụng các lệnh cmd.exe gốc thực sự hoạt động. Tôi tin rằng đó là giải pháp bản địa đơn giản nhất có thể:

for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /l/b/a-d "%D"') do @ren "%D\%F" "%F"

Nếu bạn sẵn sàng vượt xa các lệnh cmd.exe bản địa, thì một tùy chọn khác là tiện ích đổi tên biểu thức chính quy JREN.BAT của tôi hỗ trợ các tùy chọn để chuyển đổi tên thành chữ hoa hoặc chữ thường. Đó là tập lệnh thuần túy (hybrid JScript / batch) chạy tự nhiên trên mọi máy Windows từ XP trở đi - không cần tệp exe của bên thứ 3. Tài liệu đầy đủ được tích hợp sẵn - truy cập từ dòng lệnh thông qua jren /?hoặc jren /??nếu bạn muốn đầu ra phân trang.

Với JREN, giải pháp đệ quy đơn giản như:

jren "^" "" /s /l

1
Công trình tuyệt vời. FYI loại bỏ công /a-dtắc và nó cũng sẽ viết thường tên thư mục.
Keith

Đã thử lưu nó dưới dạng một tệp bó và đưa nó vào system32 để tôi có thể chạy nó bất cứ lúc nào với một lệnh duy nhất. Kết quả trong việc này: " D"') was unexpected at this time.Chạy nó dưới dạng lệnh trực tiếp hoạt động tốt, chỉ không hoạt động khi chạy dưới dạng tệp bó. Không chắc chắn làm thế nào để làm cho nó hoạt động như một tệp bó, nhưng nghĩ rằng tôi sẽ giải quyết vấn đề.
Don Cullen

1
@DonCullen - Đó là cú pháp tiêu chuẩn mà phần trăm biến FOR phải được nhân đôi khi sử dụng FOR trong tập lệnh bó. Vì vậy, %Dphải thay đổi để %%D, và %Fđể %%Fnếu bạn đặt lệnh trong một kịch bản hàng loạt.
dbenham

Luôn học hỏi một điều mới mỗi ngày. Cảm ơn!
Don Cullen

6

Tiện ích đổi tên tập tin yêu thích cá nhân của tôi là WildRename của Cylog . Trong số nhiều tính năng khác, nó có thể thay đổi trường hợp tên tệp. Điều tốt nhất về WildRename có lẽ là nó hỗ trợ các biểu thức chính quy!


Đây là ứng dụng phù hợp, sau khi cài đặt trong 10 giây. Tôi đã cấu hình và đổi tên đệ quy một thư mục từ xa (được ánh xạ để thuận tiện).
Matteo Conta

5

Phiên bản "đệ quy" của câu trả lời được chấp nhận (hoạt động *)

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"') do (for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g"))


Vòng lặp đầu tiên

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"')

Nhận danh sách các đường dẫn tuyệt đối của tất cả các thư mục bên trong hiện tại (bao gồm cả nó):

C: \ Foo>

  • C: \ Foo \ TO.txt

  • C: \ Foo \ Bar \ LOWER.txt

  • C: \ Foo \ Bar \ Baz \ CASE.txt


Vòng lặp thứ hai

for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g")

Nhận danh sách tất cả các tên tệp (hoặc tên tệpthư mục nếu bạn rút công /a-dtắc) bên trong mỗi đường dẫn tuyệt đối được tìm thấy bởi vòng lặp đầu tiên và chuyển đổi tên của các tệp này thành chữ thường.

  • C: \ Foo \ TO.txt

  • C: \ Foo \ Bar \ LOWER.txt

  • C: \ Foo \ Bar \ Baz \ CASE.txt


* nó cần hai vòng lặp vì đối số thứ hai renamephải là tên tệp chứ không phải là đường dẫn tuyệt đối (như đối số thu được từ /schuyển đổi).


Tại sao bạn có cmd /c "echo %cd%& trong đầu tiên for? Nó là hoàn toàn không cần thiết.
DavidPostill

@DavidPostill echo %cd%có mặt để thêm thư mục hiện tại vào danh sách các đường dẫn tuyệt đối ; và cmd /clàm cho &công việc kết hợp các lệnh. Tôi hoàn toàn không biết gì về Windows Batch Scripting ; nếu bạn biết một cách tốt hơn, hãy thoải mái cải thiện câu trả lời!
wc.matteo

Công việc tuyệt vời cho một người mới. Yours là giải pháp dòng lệnh cmd.exe gốc đầu tiên mà thực tế hoạt động, ngoại trừ nó không thành công khi một tên bắt đầu bằng dấu cách hoặc dấu chấm phẩy. Câu trả lời được chấp nhận gặp vấn đề tương tự. Xem câu trả lời của tôi cho một câu trả lời đơn giản hơn cũng hoạt động với không gian hàng đầu hoặc dấu chấm phẩy.
dbenham

Điều này có thể được sửa đổi để chuyển đổi thấp hơn để mũ?
Rishav

3

Bạn có thể sử dụng chiến lược "thay thế nhân vật" ...

set Name=%Name:A=a%
set Name=%Name:B=b%
set Name=%Name:C=c%

... và cứ thế, cho các chữ cái AZ. Bạn có thể có thể thực hiện nó dưới dạng một vòng lặp FOR.



1

Từ http://windowsitpro.com/articles/index.cfm?articleid=81612 :

Chỉ sử dụng các lệnh tiêu chuẩn, tôi đã viết kịch bản LwrCase.bat và LwrCase_Folder.bat để đổi tên tệp thành chữ thường hoặc đổi tên tất cả tên tệp trong thư mục thành chữ thường.

Để đổi tên tệp thành chữ thường, hãy sử dụng:

[call] LwrCase FullyQualifiedFileName

Trong đó FullQualifiedFileName là tên tệp đủ điều kiện được đổi tên.

Để đổi tên tất cả các tên tệp trong một thư mục, sử dụng:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

trong đó FullQualifiedDirectoryName là đường dẫn thư mục đủ điều kiện và / S là một tham số tùy chọn cũng sẽ đổi tên tên tệp trong tất cả các thư mục con.

LƯU Ý: LwrCase.bat sử dụng công tắc / L của lệnh DIR, trả về tên chữ thường.

LwrCase.bat chứa:

@echo off
if {%1}=={} @echo Syntax: LwrCase FullyQualifiedFileName&goto :EOF
if not exist %1 @echo LwrCase - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set file=%%a
)
if /i "%file:~0,1%" EQU "d" @echo LwrCase - %1 is NOT a file.&endlocal&goto :EOF
for /f "Tokens=*" %%f in ('dir %1 /L /b /a /a-d') do (
 Rename %1 "%%f"
)
endlocal

LwrCase_Folder.bat chứa:

@echo off
if {%1}=={} @echo Syntax: LwrCase_Folder FullyQualifiedDirectoryName&goto :EOF
if not exist %1 @echo LwrCase_Folder - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set folder=%%a
)
if /i "%folder:~0,1%" NEQ "d" @echo LwrCase_Folder - %1 is NOT a folder.&endlocal&goto :EOF
pushd %1
set sw=/B /A /A-D
if /i {%2}=={/S} set sw=%sw% %2
for /f "Tokens=*" %%f in ('dir %sw%') do (
 call LwrCase "%%f"
)
popd
endlocal

1

Chương trình tốt nhất để làm điều này trong Windows là Tiện ích đổi tên hàng loạt . Nó là một công cụ mans. Bạn thậm chí có thể sử dụng regex để đổi tên tệp và / hoặc thư mục. Nó cũng có tích hợp shell (vì vậy bạn có thể thực hiện từ explorer bằng một cú nhấp chuột phải) rất đẹp. Phiên bản 64 bit và 32 bit có sẵn.


1

Câu trả lời được chấp nhận cho câu hỏi này, bởi loftysnake , hoạt động cho thư mục hiện tại nhưng không tìm kiếm các thư mục con.  Sawny đề xuất một sửa đổi đơn giản cho câu trả lời của loftysnake để làm cho nó đệ quy, nhưng nó không hoạt động, bởi vì, trong khi renamelệnh cho phép bạn chỉ định một ổ đĩa và đường dẫn với filename1 (nguồn), filename2 (đích) phải chỉ là một tên tệp . Để trích dẫn thông báo trợ giúp ( /?),

Bạn không thể chỉ định một ổ đĩa hoặc đường dẫn mới cho tệp đích của mình.

Nhưng movehoạt động ở nơi renamekhông có, vì vậy bạn có thể đổi tên đệ quy các tệp thành chữ thường bằng lệnh này:

for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")

bởi vì nó chỉ ra rằng Movecó thể đối phó với các đường dẫn thư mục.

Lệnh trên hoạt động khi được gõ trực tiếp vào Dấu nhắc lệnh ( CMD.EXE). Nếu bạn muốn làm điều này từ trong một .BATtệp batch ( ), bạn phải nhân đôi các %ký tự:

for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")

Và bạn có thể có thể bỏ dấu ngoặc đơn /y và nói và chỉ do move ….


Nếu bạn định đăng lại thông tin mà người khác đã đăng, bạn nên xác định (các) tác giả gốc và liên kết đến (các) bài đăng của họ.
Scott

Xin lỗi, nhưng tôi đã chỉ ra rằng nó movehoạt động ở nơi renamekhông có, và tôi nghĩ tôi là người duy nhất đã đề xuất sử dụng movelệnh ở đây. Tôi chỉ đơn giản là lấy các đề xuất của @loftysnake và @sawny, và hy vọng cải thiện chúng một chút.
Adrian

Lạ nhỉ; Tôi nghĩ ai đó đã đề cập move, nhưng tôi không thể tìm thấy nó bây giờ.
Scott

0

Giải pháp đệ quy. Đặt tệp này vào tệp recursiverename.cmd ..

for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
for /r /d %%x in (*) do (
    pushd "%%x"
    for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
    popd
)

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.