คำสั่งใดใน Windows จำลองคำสั่งย้าย / เปลี่ยนชื่อแบบเรียกซ้ำจาก Unix
คำสั่งใดใน Windows จำลองคำสั่งย้าย / เปลี่ยนชื่อแบบเรียกซ้ำจาก Unix
คำตอบ:
ใช้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
*.*
อย่างไร
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).
ฉันเพิ่งจะเรียกใช้ตัวอย่างเล็ก ๆ ในกล่อง 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 กำลังถูกดำเนินการจาก ภายในชุดสคริปต์
คำสั่งในตัว XCOPY ปิดอยู่ มันจะทำซ้ำซ้ำ แต่ฉันไม่คิดว่ามันรองรับการเปลี่ยนชื่อ
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 มี%%แทนที่จะเป็น%
สิ่งนี้ใช้ได้ผลดีกว่าสำหรับฉัน:
FOR /R "C:\folder1\folder2\" %i in (.,*) DO MOVE /Y "%i" "C:\folder1\"
ที่มา: http://www.islamadel.com/index.php/notes/6-computer/10-windows-command-line
มีพอร์ต Windows สำหรับคำสั่ง UNIX ส่วนใหญ่:
ฉันได้สร้าง 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
ใช้คำสั่ง DOS ง่าย ๆ
cd ไปยังไดเรกทอรีต้นทางที่คุณต้องการเปลี่ยนชื่อนามสกุลไฟล์แบบเรียกซ้ำ
พิมพ์คำสั่งนี้:
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
ฉันเพิ่ม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
Powershell เป็นเพื่อนของคุณ ไม่ต้องแบตช์ไฟล์หรือสคริปต์ ตัวอย่างเช่นหากต้องการเปลี่ยนชื่อไฟล์. tiff ทั้งหมดซ้ำเป็น. tif ในไดเรกทอรีระยะไกลคุณสามารถเรียกใช้คำสั่งต่อไปนี้จาก Powershell:
get-childitem "\\\servername\d$\path" -recurse -Include *.tiff | Rename-Item -NewName {
$_.Name.replace(".tiff",".tif") }
ฉันพบสคริปต์ไพ ธ อนที่ใช้งานได้เช่นกัน:
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)
ฉันเพิ่ม 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
ขอให้สนุกกับคนที่สอง :)