Windows'ta bir dosyayı art arda yeniden adlandırmak veya taşımak için hangi komutu kullanabilirim?


Yanıtlar:


56

XP'nin forkomutunu kullanın . Örneğin %%xtekrarlayan bir hareket yapmak için komut satırından ( bunun yerine bir toplu iş dosyasında kullanın ) şunları yapın:

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

Özyinelemeli bir yeniden adlandırma yapmak için:

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

Örnek toplu iş:

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

Bu çok basit bir çözüm, çok teşekkürler!
javamonkey79

Bir toplu iş programında FOR komutunu kullanmak için,% değişkeni yerine %% değişkeni belirtin.
Tom Robinson,

Bunu cwd'ing olmadan farklı bir kaynak dizine nasıl yaparsınız?
Evan Carroll,

Bunu her dosyadaki her '% 20' dosyasını düz bir '' ile değiştirmek için kullanmaya çalışıyorum. Bunu nasıl yaparım?
Mike Warren,

@RobKam, aslında işe döngü için gitmek ama sadece ben, birden çok dosya uzantıları tanımak için wild card ayarlarım nasıl .. 1 dosyayı yeniden adlandırır *.*çalışır?
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 kutumda move komutuyla küçük bir örnek çalıştırdım ve işe yaradı. Tüm dosyalar ve dizinler kaynaktan desteye taşındı. kaynak ve hedef, dizin adlarıdır.

kaynak dest hareket et
ver

Microsoft Windows XP [Sürüm 5.1.2600]
hareket /?

Dosyaları taşır ve dosyaları ve dizinleri yeniden adlandırır.

Bir veya daha fazla dosyayı taşımak için:
HAREKET [/ Y | / -Y] [sürücü:] [yol] dosyaadı1 [, ...] hedef

Bir dizini yeniden adlandırmak için:
HAREKET [/ Y | / -Y] [sürücü:] [yol] dirname1 dirname2

  [sürücü:] [yol] dosyaadı1 Dosyanın konumunu ve adını belirtir
                          veya taşımak istediğiniz dosyaları
  Hedef Dosyanın yeni konumunu belirtir. Hedef
                          Bir sürücü harfi ve iki noktadan oluşabilir,
                          dizin adı veya bir kombinasyon. Eğer hareket ediyorsan
                          yalnızca bir dosya, dosya adı da ekleyebilirsiniz.
                          Taşıdığınızda dosyayı yeniden adlandırmak istiyorsunuz.
  [sürücü:] [yol] dirname1 Yeniden adlandırmak istediğiniz dizini belirtir.
  dirname2 Dizinin yeni adını belirtir.

  / Y İstediğinizi onaylamanızı isteyen istemeyi bastırır.
                          varolan bir hedef dosyanın üzerine yaz.
  / -Y Üzerine yazmak istediğinizi onaylamanızı isteyen nedenler
                          varolan bir hedef dosya.

Anahtar / Y, COPYCMD ortam değişkeninde bulunabilir.
Bu komut satırında / -Y ile geçersiz kılınabilir. Varsayılan
MOVE komutu çalıştırılmadığı sürece üzerine yazma işlemi istenirse
toplu komut dosyasında.

Özyinelemeli yeniden adlandırmayı arıyorum, üzgünüm soruyu bir parçası olarak taşıdım.
javamonkey79,

1

Yerleşik XCOPY komutu yakın. Özyinelemeli bir kopya yapacak, ancak yeniden adlandırmayı desteklediğini sanmıyorum.


1
xcopy'nin varsayılan olarak gizli dosyaları görmezden geleceğini unutmayın.
Richard Harrison

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

bu dosyayı yinelemeli olarak yeniden adlandırır :-)

bir dosyaya kaydetme, uzantıdan uzantıya 2 bağımsız değişken verir.

örn .: dosya adı test.bat komutu: test * .avi * .bmp

avi uzantılı tüm dosyaları bmp olarak değiştirir (tüm alt klasörlerde :))

Not: 26 Ekim 13: 20'de Rob Kam tarafından cevaplanan mesaj için yapılan düzeltme budur. İçin verdi

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

nerede var shud olarak %% yerine %


%% yalnızca toplu iş dosyaları için gereklidir.
paradroid



1

Dizin isimlerinde arama yapacak ve değiştirecek bir VB Script oluşturdum ... Benim de bir dosya sürümüne sahibim, ancak bunun kendi betiğinizle başlamanıza yetecek kadar olduğunu düşünüyorum. Bu betiği kullanmamın yolu benim fileandreplacedirs.vbsve onu yeniden adlandırmak istediğim klasörlerle aynı klasöre koymam. Ayrıca, mutlaka klasöre yinelenmez, ancak küçük bir değişiklik yapılabilir

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

Basit bir DOS komutu kullanın.

  1. cd dosya uzantılarını art arda yeniden adlandırmak istediğiniz kaynak dizine.

  2. Bu komutu yazın:

    ren *.[CurrentFileExtension] *.[DesiredFileExtension]
    

1
Bu cwd için iyi çalışır, ancak alt dizinleri değil, bu nedenle özyinelemeli değildir. Thank you olsa :)
javamonkey79

0

if existDosya her klasörde bulunmadığında, hataların geri alınmasını önlemek için ekledim (bu, Jenkins'te önemli olduğu için bir derlemeyi bozmaz):

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

Özyinelemeli bir yeniden adlandırma yapmak için:

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

Örnek toplu iş:

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

1
Yeni bir cevap oluşturmak yerine, eklediğiniz yanıtı gerçekten düzenlemelisiniz.
LostBalloon

0

Powershell senin arkadaşın. Toplu iş dosyası veya komut dosyası gerekmez. Örneğin, tüm .tiff dosyalarını uzak bir dizinde .tif olarak yinelemek üzere yeniden adlandırmak için Powershell'den aşağıdaki komutu çalıştırabilirsiniz:

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


0

Ben de çalışan bu python betiğini buldum:

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)

Bulunan: http://gomputor.wordpress.com/2008/09/29/change-the-extension-of-multiple-files-in-a-chosen-directory-with-python/

Python'u yoluma ekledim ve yukarıdaki Python komut dosyasını bir 'utils' klasörüne koydum. Daha sonra çalıştırmak için bu basit toplu komut dosyasını yarattım: rn.bat:

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

Ayrıca yukarıdaki python betiğini argümanlarını komut satırından almak için güncelledim. 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)

Sonunda, şimdi yapılması gereken tek şey şunun gibi bir şey:

>rn . .foo .bar

veya

>rn \ .exe .txt

İkincisi ile eğlenin :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.