คำสั่งใดที่ฉันสามารถใช้เพื่อเปลี่ยนชื่อซ้ำหรือย้ายไฟล์ใน Windows ซ้ำ?


คำตอบ:


56

ใช้forคำสั่งของ XP ตัวอย่างเช่นจากบรรทัดคำสั่ง (ในแบตช์ไฟล์ใช้%%xแทน) เพื่อทำการย้ายซ้ำทำ:

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

หากต้องการเปลี่ยนชื่อแบบเรียกซ้ำให้ทำดังนี้

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

ชุดตัวอย่าง:

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

นี่คือทางออกที่ง่ายที่สุดขอบคุณมาก!
javamonkey79

หากต้องการใช้คำสั่ง FOR ในโปรแกรมแบตช์ให้ระบุตัวแปร %% แทนตัวแปร%
Tom Robinson

คุณจะทำสิ่งนี้กับไดเรกทอรีแหล่งข้อมูลอื่นโดยไม่ต้อง cwd'ing ได้อย่างไร
Evan Carroll

ฉันพยายามใช้สิ่งนี้เพื่อแทนที่ไฟล์ '% 20' ทุกไฟล์ในทุกไฟล์ด้วยไฟล์ธรรมดา '' ฉันจะทำสิ่งนี้ได้อย่างไร
Mike Warren

@ RobKam จริง ๆ แล้วฉันไปเพื่อให้ลูปทำงานได้ แต่เพียงเปลี่ยนชื่อไฟล์ 1 ไฟล์ .. ฉันจะตั้งค่า wild card ให้รู้จักนามสกุลไฟล์หลายไฟล์ได้*.*อย่างไร
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

ฉันเพิ่งจะเรียกใช้ตัวอย่างเล็ก ๆ ในกล่อง Windows XP SP2 ของฉันด้วยคำสั่งย้ายและใช้งานได้ ไฟล์และไดเรกทอรีทั้งหมดถูกย้ายจากต้นทางไปยังปลายทาง แหล่งที่มาและปลายทางเป็นชื่อไดเรกทอรี

ปลายทางต้นทางย้าย
เวอร์ชั่น

Microsoft Windows XP [เวอร์ชั่น 5.1.2600]
ย้าย /?

ย้ายไฟล์และเปลี่ยนชื่อไฟล์และไดเรกทอรี

ในการย้ายไฟล์หนึ่งไฟล์ขึ้นไป:
ย้าย [/ Y | / -Y] [ไดรฟ์:] [เส้นทาง] ชื่อไฟล์ 1 [, ... ] ปลายทาง

วิธีเปลี่ยนชื่อไดเรกทอรี:
ย้าย [/ Y | / -Y] [ไดรฟ์:] [เส้นทาง] dirname1 dirname2

  [drive:] [path] filename1 ระบุตำแหน่งและชื่อของไฟล์
                          หรือไฟล์ที่คุณต้องการย้าย
  ปลายทางระบุตำแหน่งใหม่ของไฟล์ ปลายทาง
                          สามารถประกอบด้วยตัวอักษรไดรฟ์และลำไส้ใหญ่
                          ชื่อไดเรกทอรีหรือชุดค่าผสม หากคุณกำลังเคลื่อนไหว
                          ไฟล์เดียวเท่านั้นคุณยังสามารถรวมชื่อไฟล์ได้หาก
                          คุณต้องการเปลี่ยนชื่อไฟล์เมื่อคุณย้ายมัน
  [ไดรฟ์:] [เส้นทาง] dirname1 ระบุไดเรกทอรีที่คุณต้องการเปลี่ยนชื่อ
  dirname2 ระบุชื่อใหม่ของไดเรกทอรี

  / Y ไม่แสดงพรอมต์เพื่อยืนยันว่าคุณต้องการ
                          เขียนทับไฟล์ปลายทางที่มีอยู่
  / -Y ทำให้การพร้อมท์เพื่อยืนยันว่าคุณต้องการเขียนทับ
                          ไฟล์ปลายทางที่มีอยู่

สวิตช์ / Y อาจมีอยู่ในตัวแปรสภาพแวดล้อม COPYCMD
สิ่งนี้อาจถูกแทนที่ด้วย / -Y ในบรรทัดคำสั่ง ค่าเริ่มต้นคือ
เพื่อให้พร้อมท์เกี่ยวกับการเขียนทับเว้นแต่คำสั่ง MOVE กำลังถูกดำเนินการจาก
ภายในชุดสคริปต์

ฉันกำลังมองหาการเปลี่ยนชื่อซ้ำ ๆ ขออภัยฉันรวมการย้ายเป็นส่วนหนึ่งของคำถาม
javamonkey79

1

คำสั่งในตัว XCOPY ปิดอยู่ มันจะทำซ้ำซ้ำ แต่ฉันไม่คิดว่ามันรองรับการเปลี่ยนชื่อ


1
อย่าลืมว่า xcopy จะเพิกเฉยต่อไฟล์ที่ซ่อนอยู่ตามค่าเริ่มต้น
Richard Harrison

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

สิ่งนี้จะเปลี่ยนชื่อไฟล์ซ้ำ :-)

บันทึกในไฟล์ให้ 2 ข้อโต้แย้งจากการขยายและการขยาย

เช่น: ชื่อไฟล์คือคำสั่ง test.bat: test * .avi * .bmp

มันเปลี่ยนชื่อไฟล์ทั้งหมดที่มีนามสกุล avi เป็น bmp (ในโฟลเดอร์ย่อยทั้งหมด :))

หมายเหตุ: นี่คือการแก้ไขสำหรับโพสต์ตอบ 26 ตุลาคมเวลา 13:20 โดย Rob Kam เขาให้

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

โดยที่ shud มี%%แทนที่จะเป็น%


%% จำเป็นสำหรับไฟล์แบตช์เท่านั้น
Paradroid



1

ฉันได้สร้าง VB Script ที่จะทำการค้นหาและแทนที่ชื่อไดเรกทอรี ... ฉันมีรุ่นของไฟล์ด้วยอย่างไรก็ตามฉันคิดว่านี่เพียงพอที่จะให้คุณเริ่มต้นกับสคริปต์ของคุณเอง วิธีที่ฉันใช้สคริปต์นี้คือฉันมีfileandreplacedirs.vbsและวางไว้ในโฟลเดอร์เดียวกับโฟลเดอร์ที่ฉันต้องการเปลี่ยนชื่อ นอกจากนี้ยังไม่จำเป็นต้องเรียกคืนไปยังโฟลเดอร์ แต่อาจมีการปรับเปลี่ยนเล็กน้อย

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

ใช้คำสั่ง DOS ง่าย ๆ

  1. cd ไปยังไดเรกทอรีต้นทางที่คุณต้องการเปลี่ยนชื่อนามสกุลไฟล์แบบเรียกซ้ำ

  2. พิมพ์คำสั่งนี้:

    ren *.[CurrentFileExtension] *.[DesiredFileExtension]
    

1
ใช้งานได้ดีสำหรับ cwd แต่ไม่ใช่ไดเรกทอรีย่อยดังนั้นจึงไม่สามารถเรียกซ้ำได้ ขอบคุณ :)
javamonkey79

0

ฉันเพิ่มif existเพื่อหลีกเลี่ยงข้อผิดพลาดคืน (มันสำคัญในเจนกินส์ดังนั้นจึงไม่ทำลายโครงสร้าง) เมื่อไฟล์ไม่มีอยู่ในทุกโฟลเดอร์:

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

หากต้องการเปลี่ยนชื่อแบบเรียกซ้ำให้ทำดังนี้

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

ชุดตัวอย่าง:

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

1
แทนที่จะสร้างคำตอบใหม่คุณควรแก้ไขคำตอบที่คุณเพิ่มไว้
LostBalloon

0

Powershell เป็นเพื่อนของคุณ ไม่ต้องแบตช์ไฟล์หรือสคริปต์ ตัวอย่างเช่นหากต้องการเปลี่ยนชื่อไฟล์. tiff ทั้งหมดซ้ำเป็น. tif ในไดเรกทอรีระยะไกลคุณสามารถเรียกใช้คำสั่งต่อไปนี้จาก Powershell:

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


0

ฉันพบสคริปต์ไพ ธ อนที่ใช้งานได้เช่นกัน:

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)

พบได้ที่: http://gomputor.wordpress.com/2008/09/29/change-the-extension-of-multiple-files-in-a-chosen-directory-with-python/

ฉันเพิ่ม Python ในเส้นทางของฉันและวางสคริปต์ Python ข้างบนในโฟลเดอร์ 'utils' จากนั้นฉันสร้างสคริปต์แบทช์ง่าย ๆ นี้เพื่อเรียกใช้: rn.bat:

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

ฉันได้อัปเดตสคริปต์ไพ ธ อนด้านบนเพื่อรับ args จากบรรทัดคำสั่ง 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)

ในที่สุดทุกคนต้องทำตอนนี้คือสิ่งนี้:

>rn . .foo .bar

หรือ

>rn \ .exe .txt

ขอให้สนุกกับคนที่สอง :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.