Lệnh nào tôi có thể sử dụng để đổi tên đệ quy hoặc di chuyển tệp trong Windows?


Câu trả lời:


56

Sử dụng forlệnh của XP . Ví dụ: từ dòng lệnh ( %%xthay vào đó sử dụng tệp bó ) để thực hiện di chuyển đệ quy:

for /r %x in (foo) do move "%x" "drive:\path\bar"

Để thực hiện đổi tên đệ quy làm:

for /r %x in (*.c) do ren "%x" *.cpp

Lô ví dụ:

for /r "< DIR >" %%x in (*.c) do ren "%%x" *.cpp

Đây là giải pháp đơn giản nhất, cảm ơn nhiều!
javamonkey79

Để sử dụng lệnh FOR trong chương trình bó, chỉ định biến %% thay vì biến%.
Tom Robinson

Làm thế nào để bạn làm điều này với một thư mục nguồn khác mà không cần cwd'ing?
Evan Carroll

Tôi đang cố gắng sử dụng điều này để thay thế mọi tệp '% 20' trong mỗi tệp bằng ''. Làm thế nào để tôi làm điều này?
Mike Warren

@RobKam, tôi thực sự đi vòng lặp for để hoạt động nhưng chỉ đổi tên 1 tệp .. làm cách nào để đặt thẻ hoang dã để nhận ra nhiều phần mở rộng tệp sẽ *.*hoạt động?
DJ KRAZE

3

robocopy "C:\Source Folder" "C:\Destination Folder" /E /COPYALL /XJ


Description of parameters:
/E - copy subdirectories, including Empty ones (/S to exclude empty ones)
/COPYALL - COPY ALL file info (equivalent to /COPY:DATSOU)
/XJ - eXclude Junction points and symbolic links. (normally included by default).

2

Tôi chỉ chạy một ví dụ nhỏ trong hộp Windows XP SP2 của mình bằng lệnh di chuyển và nó đã hoạt động. Tất cả các tập tin và thư mục đã được chuyển từ nguồn sang số phận. nguồn và mệnh là tên thư mục.

di chuyển nguồn mệnh
ver

Microsoft Windows XP [Phiên bản 5.1.2600]
di chuyển /?

Di chuyển tập tin và đổi tên tập tin và thư mục.

Để di chuyển một hoặc nhiều tệp:
DI CHUYỂN [/ Y | / -Y] [drive:] [path] filename1 [, ...] đích

Để đổi tên một thư mục:
DI CHUYỂN [/ Y | / -Y] [ổ đĩa:] [đường dẫn] dirname1 dirname2

  [drive:] [path] filename1 Chỉ định vị trí và tên của tệp
                          hoặc tập tin bạn muốn di chuyển.
  đích Chỉ định vị trí mới của tệp. Nơi Đến
                          có thể bao gồm một ký tự ổ đĩa và dấu hai chấm, một
                          tên thư mục, hoặc kết hợp. Nếu bạn đang di chuyển
                          chỉ một tệp, bạn cũng có thể bao gồm tên tệp nếu
                          bạn muốn đổi tên tập tin khi bạn di chuyển nó.
  [drive:] [path] dirname1 Chỉ định thư mục bạn muốn đổi tên.
  dirname2 Chỉ định tên mới của thư mục.

  / Y Bỏ qua lời nhắc để xác nhận bạn muốn
                          ghi đè lên một tệp đích hiện có.
  / -Y Nguyên nhân nhắc nhở xác nhận bạn muốn ghi đè
                          một tệp đích hiện có.

Công tắc / Y có thể có trong biến môi trường COPYCMD.
Điều này có thể được ghi đè bằng / -Y trên dòng lệnh. Mặc định là
để nhắc về ghi đè trừ khi lệnh MOVE đang được thực thi từ
trong một tập lệnh bó.

Tôi thực sự đang tìm kiếm đổi tên đệ quy, xin lỗi tôi đã bao gồm di chuyển như một phần của câu hỏi.
javamonkey79

1

Lệnh XCOPY tích hợp đã đóng. Nó sẽ thực hiện một bản sao đệ quy, nhưng tôi không nghĩ nó hỗ trợ đổi tên.


1
đừng quên rằng xcopy sẽ bỏ qua các tập tin ẩn theo mặc định.
Richard Harrison

1
for /r %%x in (%1) do ren "%%x" %2

điều này sẽ đổi tên tập tin đệ quy :-)

lưu trong một tệp đưa ra 2 đối số từ phần mở rộng và phần mở rộng.

ví dụ: tên tệp là test.bat lệnh: test * .avi * .bmp

nó đổi tên tất cả các tệp có phần mở rộng avi thành bmp (trong tất cả các thư mục con :))

Lưu ý: Đây là chỉnh sửa cho bài đăng được trả lời ngày 26 tháng 10 lúc 13:20 bởi Rob Kam. Anh ấy đã cho

/r %x in (*.c) do ren "%x" *.cpp

khi mà shud có %% thay vì %


%% Chỉ cần thiết cho các tệp bó.
paradroid



1

Tôi đã tạo VB Script để thực hiện tìm kiếm và thay thế tên thư mục ... Tôi cũng có phiên bản tệp, tuy nhiên, tôi nghĩ rằng điều này là đủ để bạn bắt đầu với tập lệnh của riêng mình. Cách tôi sử dụng tập lệnh này là tôi có một fileandreplacedirs.vbsvà đặt nó vào cùng thư mục với các thư mục tôi muốn đổi tên. Ngoài ra, nó không nhất thiết phải truy xuất vào thư mục, nhưng có thể với một chút sửa đổi

search1  = InputBox("Search for...", "", "")
replace1 = InputBox("replace with...", "", "")

Dim MyFile
MyFiles = GetFileArray(".")

For Each MyFile In MyFiles
    NewFilename = Replace(MyFile.Name, search1, replace1)
    If InStr( MyFile.Name, search1 ) Then MyFile.Name = NewFilename
Next

MsgBox "Done..."

function GetFileArray(ByVal vPath)
    'Get our objects...
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Folder = FSO.Getfolder(vPath)
    Set Files = Folder.SubFolders

    'Resize the local array
    'Arrays are 0 based but Files collection is 1 based.
    if Files.count = 0 then
        GetFileArray = array()
        Exit Function
    Else
        Index = 0
        Redim FileList(Files.Count-1)
        For Each File In Files
            set FileList(Index) = File
            Index = Index + 1
        Next
        GetFileArray = FileList
    End If

    'Always good practice to explicitly release objects...
    Set FSO = Nothing
    Set Folder = Nothing
    Set Files = Nothing

End function

0

Sử dụng lệnh DOS đơn giản.

  1. cd vào thư mục nguồn nơi bạn muốn đổi tên các phần mở rộng tệp theo cách đệ quy.

  2. Gõ lệnh này:

    ren *.[CurrentFileExtension] *.[DesiredFileExtension]
    

1
Điều đó hoạt động tốt cho cwd, nhưng không phải là thư mục con, do đó nó không được đệ quy. Dù vậy cũng cảm ơn bạn :)
javamonkey79

0

Tôi đã thêm if existđể tránh trả về lỗi (vấn đề ở Jenkins vì vậy nó không phá vỡ bản dựng) khi tệp không tồn tại trong mọi thư mục:

for /r %x in (foo) do if exist "%x" move "%x" "drive:\path\bar"

Để thực hiện đổi tên đệ quy làm:

for /r %x in (*.c) do if exist "%x" ren "%x" *.cpp

Lô ví dụ:

for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp

1
Thay vì tạo một câu trả lời mới, bạn thực sự nên chỉnh sửa câu trả lời bạn đã thêm vào.
LostBalloon

0

Powershell là bạn của bạn. Không có tập tin bó hoặc tập lệnh cần thiết. Ví dụ: để đổi tên đệ quy tất cả các tệp .tiff thành .tif trong một thư mục từ xa, bạn có thể chạy lệnh sau từ Powershell:

get-childitem "\\\servername\d$\path" -recurse -Include *.tiff | Rename-Item -NewName { $_.Name.replace(".tiff",".tif") }


0

Tôi tìm thấy kịch bản python này cũng hoạt động:

for root, dirs, files in os.walk(cur_dir):  
    for filename in files:  
        file_ext = os.path.splitext(filename)[1]  
        if old_ext == file_ext:  
            oldname = os.path.join(root, filename)  
            newname = oldname.replace(old_ext, new_ext)  
            os.rename(oldname, newname)

Tìm thấy tại: http://gomputor.wordpress.com/2008/09/29/change-the-extension-of-multipl-files-in-a-chosen-directory-with-python/

Tôi đã thêm Python vào đường dẫn của mình và đặt tập lệnh Python ở trên vào thư mục 'utils'. Sau đó tôi đã tạo tập lệnh bó đơn giản này để chạy nó: rn.bat:

python \utils\rn.py %1 %2 %3

Tôi cũng đã cập nhật kịch bản python ở trên để lấy đối số của nó từ dòng lệnh. rn.py:

import sys
import os

cur_dir = sys.argv[1]
old_ext = sys.argv[2]
new_ext = sys.argv[3]

#print cur_dir, old_ext, new_ext
for root, dirs, files in os.walk(cur_dir):  
    for filename in files:  
        file_ext = os.path.splitext(filename)[1]

        if old_ext == file_ext:  
            oldname = os.path.join(root, filename)  
            newname = oldname.replace(old_ext, new_ext)  
            os.rename(oldname, newname)

Cuối cùng, tất cả những gì cần làm bây giờ là một cái gì đó như thế này:

>rn . .foo .bar

hoặc là

>rn \ .exe .txt

Hãy vui vẻ với cái thứ hai :)

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.