Яку команду можна використовувати для рекурсивного перейменування або переміщення файлу в 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 у пакетній програмі, вкажіть змінну %% замість% змінної.
Том Робінсон

Як це зробити в іншому вихідному каталозі без cwd'ing?
Еван Керролл

Я намагаюся використовувати це, щоб замінити кожен файл "% 20" у кожному файлі на простий ". Як це зробити?
Майк Уорен

@RobKam, я фактично переходжу на цикл для роботи, але перейменовує лише 1 файл .. як встановити підстановку, щоб розпізнати кілька розширень файлів *.*?
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

Я просто запускаю невеликий приклад у вікні SP2 для Windows XP з командою переміщення, і вона спрацювала. Усі файли та каталоги були переміщені від джерела до призначення. джерело та dest - це назви директорій.

перемістити джерело dest
вер

Microsoft Windows XP [Версія 5.1.2600]
рухатися /?

Переміщує файли та перейменовує файли та каталоги.

Щоб перемістити один або кілька файлів:
ПОВЕРНУТИСЯ [/ Y | / -Y] [диск:] [шлях] ім'я файлу1 [, ...] призначення

Щоб перейменувати каталог:
ПОВЕРНУТИСЯ [/ Y | / -Y] [диск:] [шлях] dirname1 dirname2

  [drive:] [path] filename1 Вказує місце та ім'я файлу
                          або файли, які потрібно перемістити.
  призначення Вказує нове розташування файлу. Місце призначення
                          може складатися з букви приводу та двокрапки, а
                          ім'я каталогу або їх комбінація. Якщо ви рухаєтесь
                          лише один файл, ви також можете включити ім'я файлу, якщо
                          ви хочете перейменувати файл під час переміщення.
  [drive:] [path] dirname1 Вказує каталог, який потрібно перейменувати.
  dirname2 Вказує нову назву каталогу.

  / Y Пригнічує запит підтвердити, що ви хочете
                          перезаписати існуючий файл призначення.
  / -Y Викликає запит підтвердити, що ви хочете перезаписати
                          наявний файл призначення.

Перемикач / Y може бути присутнім у змінній середовища COPYCMD.
Це може бути замінено на / -Y в командному рядку. За замовчуванням є
для запиту на перезаписи, якщо з нього не виконується команда MOVE
в пакетному сценарії.

Я дуже шукаю рекурсивне перейменування, вибачте, що я включив цей крок як частину питання.
javamonkey79

1

Вбудована команда XCOPY близька. Це буде робити рекурсивну копію, але я не думаю, що вона підтримує перейменування.


1
не забувайте, що xcopy за замовчуванням ігнорує приховані файли.
Річард Гаррісон

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

це перейменує файл рекурсивно :-)

збережіть у файлі дайте 2 аргументи від розширення та до розширення.

Наприклад: ім'я файлу test.bat команда: test * .avi * .bmp

він перейменовує всі файли з розширенням avi в bmp (у всіх папках :))

Примітка. Це виправлення публікації, яку 26 жовтня о 13:20 відповів Роб Кам. Він дав за

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

де, як здригаються, мають %% замість %


%% потрібен лише для пакетних файлів.
парадороїд



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

Використовуйте просту команду 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

Пауершелл - твій друг. Не потрібні пакетні файли чи сценарії. Наприклад, щоб рекурсивно перейменувати всі .tiff файли на .tif у віддаленому каталозі, ви можете запустити наступну команду з Powershell:

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


0

Я знайшов цей сценарій python, який також працює:

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

Я також оновив сценарій python вище, щоб взяти його аргументи з командного рядка. 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.