Windows में एक फ़ाइल को फिर से नाम बदलने या स्थानांतरित करने के लिए मैं किस कमांड का उपयोग कर सकता हूं?


40

विंडोज में क्या कमांड यूनिक्स से पुनरावर्ती चाल / नाम बदलने का आदेश देता है?

जवाबों:


56

XP की forकमांड का उपयोग करें । कमांड लाइन से उदाहरण के लिए (एक बैच फ़ाइल उपयोग के %%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 कमांड का उपयोग करने के लिए,% वेरिएबल के बजाय% वेरिएबल निर्दिष्ट करें।
टॉम रॉबिन्सन

आप cwd'ing के बिना किसी अन्य स्रोत निर्देशिका के लिए यह कैसे करते हैं?
इवान कैरोल

मैं इसका उपयोग करने की कोशिश कर रहा हूं कि प्रत्येक फ़ाइल में '% 20' फ़ाइल को सादे '' के साथ बदलने के लिए। मैं यह कैसे करु?
माइक वॉरेन

@RobKam, मैं वास्तव में काम करने के लिए लूप के लिए जाता हूं, लेकिन केवल 1 फ़ाइल का नाम बदलता है .. मैं एकाधिक फ़ाइल एक्सटेंशन को पहचानने के लिए वाइल्ड कार्ड कैसे सेट करूंगा *.*?
बजे डीजे 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

मैं अपने विंडोज एक्सपी SP2 बॉक्स में मूव कमांड के साथ एक छोटा सा उदाहरण चलाता हूं और यह काम करता है। सभी फ़ाइलों और निर्देशिकाओं को स्रोत से गंतव्य पर ले जाया गया। स्रोत और भाग्य निर्देशिका नाम हैं।

स्रोत गंतव्य ले जाएँ
ver

Microsoft Windows XP [संस्करण 5.1.2600]
चाल /?

फ़ाइलों को ले जाता है और फ़ाइलों और निर्देशिकाओं का नाम बदल देता है।

एक या अधिक फ़ाइलों को स्थानांतरित करने के लिए:
MOVE [/ Y | / -Y] [ड्राइव:] [पथ] फ़ाइलनाम १ [, ...] गंतव्य

एक निर्देशिका का नाम बदलने के लिए:
MOVE [/ Y | / -Y] [ड्राइव:] [पथ] dirname1 dirname2

  [ड्राइव:] [पथ] फ़ाइल नाम १ फ़ाइल के स्थान और नाम को निर्दिष्ट करता है
                          या फ़ाइलें जिन्हें आप ले जाना चाहते हैं।
  गंतव्य फ़ाइल का नया स्थान निर्दिष्ट करता है। गंतव्य
                          एक ड्राइव पत्र और बृहदान्त्र से मिलकर कर सकते हैं, a
                          निर्देशिका का नाम, या एक संयोजन। अगर आप हिल रहे हैं
                          केवल एक फ़ाइल, यदि आप फ़ाइल नाम भी शामिल कर सकते हैं
                          जब आप इसे स्थानांतरित करते हैं तो आप फ़ाइल का नाम बदलना चाहते हैं।
  [ड्राइव:] [पथ] dirname1 उस निर्देशिका को निर्दिष्ट करता है जिसका आप नाम बदलना चाहते हैं।
  dirname2 निर्देशिका का नया नाम निर्दिष्ट करता है।

  / Y आप की पुष्टि करने के लिए संकेत देना चाहता है
                          मौजूदा गंतव्य फ़ाइल को अधिलेखित करें।
  / -आप को अधिलेखित करने की पुष्टि करने के लिए संकेत देने का कारण बनता है
                          एक मौजूदा गंतव्य फ़ाइल।

COPYCMD वातावरण चर में स्विच / Y मौजूद हो सकता है।
इसे कमांड लाइन पर / -Y के साथ ओवरराइड किया जा सकता है। डिफ़ॉल्ट है
ओवरराइट पर शीघ्र करने के लिए जब तक कि आदेश से निष्पादित नहीं किया जा रहा है
एक बैच स्क्रिप्ट के भीतर।

मैं वास्तव में पुनरावर्ती नाम ढूंढ रहा हूं, क्षमा करें मैंने प्रश्न के भाग के रूप में कदम शामिल किया है।
javamonkey79

1

अंतर्निहित XCOPY कमांड करीब है। यह एक पुनरावर्ती कॉपी करेगा, लेकिन मुझे नहीं लगता कि यह नाम बदलने का समर्थन करता है।


1
यह मत भूलो कि xcopy डिफ़ॉल्ट रूप से छिपी हुई फ़ाइलों को अनदेखा करेगा।
रिचर्ड हैरिसन

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

यह पुनरावर्ती फ़ाइल का नाम बदल देगा :-)

फ़ाइल में सेव करने से एक्सटेंशन और एक्सटेंशन से 2 तर्क दिए जाते हैं।

ex: फ़ाइल का नाम test.bat कमांड: test * .avi * .bmp है

यह एक्सटेंशन एवीआई के साथ सभी फाइलों को bmp (सभी सबफोल्डर्स में :) नाम देता है)

नोट: यह रोब कम के द्वारा 13:20 पर 26 अक्टूबर को पोस्ट किए गए उत्तर के लिए सुधार है। उसने के लिए दिया

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

जहां यह है shud के रूप में %% के बजाय %


%% की जरूरत केवल बैच फ़ाइलों के लिए है।
पैराडायरायड



1

मैंने एक VB स्क्रिप्ट बनाई है जो निर्देशिका नामों पर एक खोज और प्रतिस्थापित करेगी ... मेरे पास एक फ़ाइल संस्करण भी है, हालांकि, मुझे लगता है कि यह आपको अपनी स्क्रिप्ट के साथ शुरू करने के लिए पर्याप्त है। जिस तरह से मैं इस स्क्रिप्ट का उपयोग करता हूं वह मेरे पास है 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

एक साधारण डॉस कमांड का उपयोग करें।

  1. सीडी निर्देशिका स्रोत के लिए जहाँ आप फ़ाइल एक्सटेंशन का नाम बदलना चाहते हैं।

  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
एक नया उत्तर बनाने के बजाय, आपको वास्तव में आपके द्वारा जोड़े गए उत्तर को संपादित करना चाहिए।
15

0

पॉवरशेल आपका दोस्त है। कोई बैच फ़ाइलों या स्क्रिप्ट की जरूरत नहीं है। उदाहरण के लिए, सभी .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/

मैंने अपने पथ में पायथन को जोड़ा और ऊपर 'स्क्रिप्ट' फ़ोल्डर में पायथन लिपि को रखा। मैंने इसे चलाने के लिए यह सरल बैच स्क्रिप्ट बनाई: rn.bat:

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

मैंने कमांड लाइन से इसके आर्ग्स लेने के लिए ऊपर दी गई पाइथन स्क्रिप्ट को भी अपडेट किया। 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

दूसरे के साथ मज़े करो :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.