2010-09-27 49 views
15

Tôi muốn đổi tên một số lượng lớn tệp trong một thư mục trên hệ thống WinXP, tốt nhất là sử dụng tệp lô.Làm thế nào để tạo tập tin batch để đổi tên một số lượng lớn các tập tin trong một thư mục?

Các tập tin hiện được đặt tên như thế này:

Vacation2010 001.jpg
Vacation2010 002.jpg
Vacation2010 003.jpg

Và tôi muốn thay đổi chúng để:

December 001.jpg
De cember 002.jpg
December 003.jpg

Làm cách nào để thực hiện thao tác này ??

+0

Bạn có thể thích [XYplorer] (http://www.xyplorer.com/), mà tôi sử dụng cho một vài năm, cho đến khi tôi ngừng sử dụng Windows ở nhà. Nó có một giao diện đổi tên hàng loạt để xử lý tình huống này mà không cần lập trình, và cũng đáng giá cả, tất cả xung quanh. –

+1

@Roger Ngoài ra Bulk Rename Utility (http://www.bulkrenameutility.co.uk) là một công cụ rất tốt và nó hoàn toàn miễn phí. – bluish

Trả lời

9
dir /b *.jpg >file.bat 

này sẽ cung cấp cho bạn đường như:

Vacation2010 001.jpg
Vacation2010 002.jpg
Vacation2010 003.jpg

Sửa file.bat trong favorite Windows của bạn text-editor, thực hiện tương đương:

s/Vacation2010(.+)/rename "&" "December \1"/ 

Đó là regex; nhiều người chỉnh sửa hỗ trợ họ, nhưng không có trình duyệt nào mặc định với Windows (theo như tôi biết). Bạn cũng có thể nhận được một công cụ dòng lệnh như sed hoặc perl có thể lấy cú pháp chính xác mà tôi có ở trên, sau khi thoát khỏi dòng lệnh.

Các dòng kết quả sẽ trông giống như:

đổi tên "Vacation2010 001.jpg" "Tháng Mười Hai 001.jpg"
đổi tên "Vacation2010 002.jpg" "Tháng Mười Hai 002.jpg"
đổi tên "Vacation2010 003.jpg "" Tháng 12 003.jpg "

Bạn có thể nhận ra những dòng này là lệnh đổi tên, một cho mỗi tệp từ danh sách gốc. ;) Chạy tập tin batch đó trong cmd.exe.

+1

Đó/b cờ để dir là vô cùng hữu ích, phải không? –

+0

@Jim: Không hữu ích như * ls * dưới Cygwin! :) dir/s cũng được đánh giá thấp. –

+3

Thật kinh khủng khi một hệ điều hành cần một mẹo như vậy để đơn giản đổi tên một tập hợp các tập tin, phải không? – bluish

6

bạn có thể thực hiện việc này dễ dàng mà không cần chỉnh sửa thủ công hoặc sử dụng trình chỉnh sửa văn bản ưa thích. Đây là một vbscript.

Set objFS = CreateObject("Scripting.FileSystemObject") 
strFolder="c:\test" 
Set objFolder = objFS.GetFolder(strFolder) 
For Each strFile In objFolder.Files 
    If objFS.GetExtensionName(strFile) = "jpg" Then  
     strFileName = strFile.Name 
     If InStr(strFileName,"Vacation2010") > 0 Then   
      strNewFileName = Replace(strFileName,"Vacation2010","December") 
      strFile.Name = strNewFileName 
     End If 
    End If 
Next 

tiết kiệm như myscript.vbs và

C:\test> cscript //nologo myscript.vbs 
23
@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET old=Vacation2010 
SET new=December 
for /f "tokens=*" %%f in ('dir /b *.jpg') do (
    SET newname=%%f 
    SET newname=!newname:%old%=%new%! 
    move "%%f" "!newname!" 
) 

Điều này không là nó vòng qua tất cả các file .jpg trong thư mục mà tập tin batch nằm và thay thế Vacation2010 với tháng bên trong tên tập tin.

+0

Để đổi tên chỉ các tệp đã chọn, chúng tôi có thể chỉ định tên tệp là AB.jpg, ABC.jpg, ABCD.jpg như vậy không? –

1
@ECHO off & SETLOCAL EnableDelayedExpansion 

SET "_dir=" REM Must finish with '\' 
SET "_ext=jpg" 
SET "_toEdit=Vacation2010" 
SET "_with=December" 
FOR %%f IN ("%_dir%*.%_ext%") DO (
    CALL :modifyString "%_toEdit%" "%_with%" "%%~Nf" fileName 
    RENAME "%%f" "!fileName!%%~Xf" 
) 
GOTO end 

:modifyString what with in toReturn 
    SET "__in=%~3" 
    SET "__in=!__in:%~1=%~2!" 
    IF NOT "%~4" == "" (
     SET %~4=%__in% 
    ) ELSE (
     ECHO %__in% 
    ) 
    EXIT /B 

:end 

kịch bản này cho phép bạn thay đổi tên của tất cả các file có chứa Vacation2010 có cùng tên, nhưng với December thay vì Vacation2010.

Nếu bạn sao chép và dán mã, bạn phải lưu .bat trong cùng một thư mục của ảnh. Nếu bạn muốn lưu tập lệnh trong một thư mục khác [E.G. bạn có một thư mục yêu thích cho các tiện ích] bạn phải thay đổi giá trị của _dir bằng đường dẫn của ảnh.

Nếu bạn phải làm công việc tương tự cho các bức ảnh khác [hoặc các tập tin khác changig _ext] bạn phải thay đổi giá trị của _toEdit với chuỗi bạn muốn thay đổi [hoặc xóa] và giá trị của _with với chuỗi bạn muốn đặt thay vì _toEdit [SET "_with=" nếu bạn chỉ muốn xóa chuỗi được chỉ định trong _toEdit].

0

Bạn không cần một tập tin thực thi, chỉ cần làm điều này từ PowerShell:

powershell -C "gci | % {rni $_.Name ($_.Name -replace 'Vacation2010', 'December')}" 
Các vấn đề liên quan