วิธีการเปลี่ยนชื่อไฟล์ 80.000 พร้อมกันใน Windows


8

ฉันมี 80,000 ไฟล์ในโฟลเดอร์และฉันต้องการเปลี่ยนชื่อไฟล์ทั้งหมดจาก

filename.jpg

ถึง

._filename.jpg

ในสภาพแวดล้อม Windows ฉันเดาจาก dos เหตุผลก็คือฉันได้บีบอัดไฟล์เหล่านี้ลงใน tar.gz จาก unix และคัดลอกไปยัง windows และด้วยเหตุผลบางอย่างที่ชื่อไฟล์มีการเปลี่ยนแปลง

คุณบอกฉันได้ไหมว่าคำสั่งให้ทำคืออะไร ขอบคุณ

คำตอบ:


3

คุณสามารถใช้ built-in renameหรือren command:

ren *.jpg ._*.jpg

แม้ว่าเช่นเดียวกับสิ่งเหล่านี้ลองในไดเรกทอรีที่มีเพียงไม่กี่ไฟล์ก่อน


1
ฉันชอบแนวทางของคุณ แต่ฉันมี 2 ประเด็น: (1) ตัวอักษรตัวแรกของชื่อไฟล์จะถูกแทนที่ ในคำอื่น ๆ "._" จะไม่ถูกเพิ่มที่จุดเริ่มต้น แต่จะแทนที่ตัวอักษร 2 ตัวแรก (2) "._" ใช้งานไม่ได้จริง ๆ ถ้าฉันใช้เช่น "__" มันก็ใช้ได้ ฉันคิดว่าจุด "." ให้ปัญหาบางอย่าง
aneuryzm

@ แพทริค - ฉันต้องยอมรับว่าฉันไม่มีโอกาสทดสอบสิ่งนี้อย่างเต็มที่และใช่ฉันคิดว่าคุณพูดถูกเกี่ยวกับจุดที่ทำให้เกิดปัญหา
ChrisF

สิ่งนี้ไม่ถูกต้องและไม่ใช่เพราะจุดต่างๆ renสามารถแทนที่ข้อความด้วยข้อความที่มีความยาวเท่ากัน ตัวอย่างเช่นถ้าคุณมีไฟล์file1.txtและfile2.txt, ren file*.txt blah*.txtไม่สิ่งที่คุณคาดหวัง (ตอนนี้คุณมีไฟล์blah1.txtและblah2.txt) อย่างไรก็ตามหากคุณพิมพ์ren blah*.txt myfile*.txtคำสั่งจะระเบิดเพราะจะเปลี่ยนblah1.txtเป็นmyfile.txt(ไม่ใช่myfile1.txt) แล้วไม่สามารถเปลี่ยนชื่อblah2.txtเป็นmyfile.txtเพราะไฟล์นั้นมีอยู่แล้ว
David Richerby

15

นี่คือวิธีการใช้ PowerShell:

นำทางไปยังโฟลเดอร์ของคุณและเรียกใช้คำสั่งนี้

Get-ChildItem *.jpg | Rename-Item -newname {"._" + $_.Name}

รุ่นสั้นโบนัสพิเศษ:

gci *.jpg | ren -newname {"._" + $_.Name}

6

ฉันมี 2 วิธีแก้ไข:

  1. ไฟล์ทั้งหมดอยู่ในโฟลเดอร์เดียวกัน

    • เรียกใช้จากพรอมต์คำสั่งต่อไปนี้ในโฟลเดอร์นั้น:

      for /f "delims=¯" %i in ('dir /b /on') do ren "%i" "._%i"
      
  2. โซลูชันที่สมบูรณ์เมื่อมีไฟล์ในโฟลเดอร์ย่อยและเมื่อคุณต้องการแทนที่อักขระแรก "n" ด้วยสตริงที่คุณต้องการ: D

    • สร้างไฟล์แบตช์ด้วยคำสั่งดังต่อไปนี้
    • เปลี่ยนพารามิเตอร์ตัวแปรเป็นสิ่งที่คุณต้องการ
      • path: ใส่ใน""รูทพา ธ ของไฟล์ของคุณ (เช่น "C: \ Documents และ settings \ user \ desktop \ new folder"
      • numfirstchars2replace: ใส่ตัวเลขด้วยอักขระตัวแรกเพื่อแทนที่ (ในกรณีของคุณ 2)
      • str2put: ใส่สตริงที่จะเพิ่มเป็นคำนำหน้าของชื่อไฟล์ใหม่ (ในกรณีของคุณ._)
    • เรียกใช้ในโฟลเดอร์ที่แตกต่างจากที่เป็นไฟล์


@echo off

::only to tell user what this bat are doing
echo.1.initializing...

::enable that thing to allow, for example, incremental counter in a for loop :)
echo.- EnableDelayedExpansion
SETLOCAL EnableDelayedExpansion

::variables
echo.- variables
:: - place here the absolute root path of your files
set path="put here where are the root folder of your files"
set pathbak=%cd%
set numfirstchars2replace=2
set str2put=._

::go to %path% and its driveletter
echo.- entering the path you want
for /f "delims=¯" %%i in ('echo.%path%') do %%~di
cd %path%

::search all subfolders and save them to a temp file
echo.- searching for subfolders
echo.%path%>%temp%\tmpvar.txt
for /f "delims=¯" %%i in ('dir /s /b /on /ad') do echo."%%i">>%temp%\tmpvar.txt

::execute command for root folder and all found subfolders
echo.
echo.2.executing...
for /f "delims=¯" %%i in (%temp%\tmpvar.txt) do (
  cd %%i
  echo.- in folder: %%i
  for /f "delims=¯" %%j in ('dir /b /on /a-d') do (
    set newname=%%j
    set newname=!newname:~%numfirstchars2replace%,1000!
    echo.- renaming from "%%j" to "%str2put%!newname!"...
    ren "%%j" "%str2put%!newname!"
  )
)

echo.
echo.3.exiting...
::return to %pathbak% and its driveletter
for /f "delims=¯" %%i in ('echo.%pathbak%') do %%~di
cd %pathbak%

@echo on

การทดสอบอย่างเต็มที่ :) มันแก้ปัญหาของคุณรวมถึงรายละเอียดบางอย่างที่คุณให้ไว้ในความคิดเห็น @ChrisF หมายเหตุ: ใน "delims = ¯" หากใช้ "¯" ในชื่อไฟล์ให้เปลี่ยน "¯" ด้วยตัวละครอื่นที่คุณรู้ว่าไม่ได้ใช้ในชื่อไฟล์
kokbira

โหวตขึ้นเนื่องจากสคริปต์ยาวอย่างไม่น่าเชื่อของคุณเพียงแค่วนซ้ำและเปลี่ยนชื่อฏ :)
wullxz

ดีฉันสามารถสร้างลูป "for / f" พร้อมไฟล์ทั้งหมดเรียงตามชื่อจากนั้นเปลี่ยนชื่อเป็น "._lenameX.jpg" โดยมี X เป็นหมายเลขคำสั่งซื้อ แต่ฉันคิดว่าจะทำได้สำหรับกรณีอื่น ๆ - หากในอนาคตปัญหาที่ปรากฏคล้ายคนที่สามารถปรับเปลี่ยนคำสั่งบางอย่าง ...
kokbira

คุณสามารถใช้ "delims =" แทน "delims = ¯" (ฉันลืมไปว่า: D) คุณยังสามารถใช้สำหรับ / f Intead ของสำหรับ / f "delims =" เพราะมันไม่สิ่งที่ฉันต้องการในกรณีที่ว่า ...
kokbira

3

หากทั้งหมดอยู่ในโฟลเดอร์เดียวกันคุณสามารถเลือกทั้งหมดด้วยControl+ Aจากนั้นกดF2เพื่อเปลี่ยนชื่อหนึ่งในนั้น ไฟล์ที่ตามมาทั้งหมดจะถูกตั้งชื่อไฟล์ (2), ไฟล์ (3), เป็นต้น


3

ลอง Powershell (ติดตั้งล่วงหน้าใน Windows 7):

Get-Childitem /path/to/your/files | foreach-object { move-item $_ $("._" + $_.name) }

(ทดสอบในดาวน์โหลด -dir ของฉัน)

แก้ไข : รหัสของ Siim K จะต่อท้าย ".jpg" เพิ่มเติมทุกรายการ "._filename.jpg" ลบ ".jpg" สุดท้ายในรหัสของ Siim K และคุณมีรหัสสั้น ๆ ที่สวยงามเพื่อเปลี่ยนชื่อไฟล์ของคุณ


ขอบคุณอัปเดตแล้ว รหัสที่ใช้ซ้ำจากคำสั่งเปลี่ยนชื่อที่คล้ายกันซึ่งต้องการการจัดการส่วนขยายและไม่ได้สังเกตเห็น
Siim K


0

ฉันพบเสมอว่าFlash Renamerเป็นเครื่องมือที่ดีสำหรับการเปลี่ยนชื่อไฟล์เป็นชุด

มันมีเวอร์ชั่นทดลองและเวอร์ชั่นเต็ม ($ 20) และสามารถเปลี่ยนชื่อไฟล์ตามข้อมูล meta - มีประโยชน์มากสำหรับการเปลี่ยนชื่อไฟล์ MP3 ซึ่งเป็นสิ่งที่ฉันใช้เป็นส่วนใหญ่


0

หากคุณกำลังมองหาวิธีที่เป็นมิตรกับผู้ใช้ในการเปลี่ยนชื่อเป็นกลุ่มคุณสามารถลองใช้เครื่องมือฟรีRen Renamerได้มีรายการการกระทำมากมายที่คุณสามารถทำได้ ฉันใช้มันเยอะเมื่อเล่นกับไลบรารีเพลงรูปถ่ายหรือวิดีโอ


0

ฉันใช้โปรแกรมเปลี่ยนไฟล์ฟรีแวร์นี้กับผลลัพธ์ที่ยอดเยี่ยม ตัวกรองและตัวเลือกต่าง ๆ มากมายรวมถึงช่วยให้คุณสามารถทดสอบผลลัพธ์ได้ UI ที่ล้าสมัยเล็กน้อยอาจใช้งานได้ แต่เป็นแชมป์

http://www.webxpace.com/software/freeware.shtml#FileRenamer

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