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)
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âu trả lời:
Đ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 (...)
- %f
là 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 . ( a
viết tắt của attribute
, -
viết tắt not
và d
viế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 dir
lệnh và /l
kết hợp.for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")
(đã thêm / r vào dir).
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
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} |
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
/a-d
tắc và nó cũng sẽ viết thường tên thư mục.
" 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 đề.
%D
phải thay đổi để %%D
, và %F
để %%F
nếu bạn đặt lệnh trong một kịch bản hàng loạt.
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!
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"))
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
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ệp và thư mục nếu bạn rút công /a-d
tắ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 rename
phải là tên tệp chứ không phải là đường dẫn tuyệt đối (như đối số thu được từ /s
chuyển đổi).
cmd /c "echo %cd%&
trong đầu tiên for
? Nó là hoàn toàn không cần thiết.
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 /c
là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!
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower cung cấp một chức năng đơn giản mà bạn sẽ có thể bao gồm và gọi từ một tệp bó.
Vì vậy, có tệp bó lặp qua các thư mục / tên tệp và gọi hàm này để tạo phiên bản chữ thường của tên.
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
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.
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 rename
lệ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 move
hoạt động ở nơi rename
khô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 Move
có 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 .BAT
tệ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 …
.
move
hoạt động ở nơi rename
không có, và tôi nghĩ tôi là người duy nhất đã đề xuất sử dụng move
lệ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.
move
, nhưng tôi không thể tìm thấy nó bây giờ.
Quyền hạn
Điều hướng đến thư mục và chạy:
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
Tôi đã xác minh rằng điều này hoạt động. Tìm thấy ở đây: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx