Какую команду я могу использовать, чтобы рекурсивно переименовать или переместить файл в Windows?

Какая команда в Windows эмулирует рекурсивное перемещение / переименовывают команду от Unix?

40
задан 07.01.2012, 14:07

9 ответов

Используйте 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
56
ответ дан 07.12.2019, 08:45

Я просто выполняю небольшой пример в своем поле Windows XP SP2 с командой перемещения, и это работало. Все файлы и каталоги были перемещены от источника до dest. источника, и dest являются именами каталогов.

move source dest
ver

Microsoft Windows XP [Version 5.1.2600]
move /?

Moves files and renames files and directories.

To move one or more files:
MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination

To rename a directory:
MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2

  [drive:][path]filename1 Specifies the location and name of the file
                          or files you want to move.
  destination             Specifies the new location of the file. Destination
                          can consist of a drive letter and colon, a
                          directory name, or a combination. If you are moving
                          only one file, you can also include a filename if
                          you want to rename the file when you move it.
  [drive:][path]dirname1  Specifies the directory you want to rename.
  dirname2                Specifies the new name of the directory.

  /Y                      Suppresses prompting to confirm you want to
                          overwrite an existing destination file.
  /-Y                     Causes prompting to confirm you want to overwrite
                          an existing destination file.

The switch /Y may be present in the COPYCMD environment variable.
This may be overridden with /-Y on the command line.  Default is
to prompt on overwrites unless MOVE command is being executed from
within a batch script.
2
ответ дан 07.12.2019, 08:45

Встроенная команда XCOPY близка. Это сделает рекурсивную копию, но я не думаю, что это поддерживает, переименовывают.

1
ответ дан 07.12.2019, 08:45
for /r %%x in (%1) do ren "%%x" %2

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

сохраните в файле, дают 2 аргумента от расширения и к расширению.

исключая: имя файла является командой test.bat: протестируйте *.avi *.bmp

это переименовывает все файлы с расширением avi к bmp (во всех подпапках :))

Примечание: Это - исправление для сообщения, которому отвечает 26 октября в 13:20 Rob Kam. Он дал для

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

где как он shud имеют %% вместо %

1
ответ дан 07.12.2019, 08:45

Это работало лучше на меня:

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

1
ответ дан 07.12.2019, 08:45

Существуют порты Windows для большинства команд UNIX:

1
ответ дан 07.12.2019, 08:45

Я создал Сценарий VB, который сделает поиск и замену на именах каталогов... У меня есть версия файлов также, однако, я думаю, что этого достаточно для запущения Вас с Вашего собственного сценария. Путем я использую этот сценарий, у меня есть a 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
1
ответ дан 07.12.2019, 08:45

Используйте простую команду DOS.

  1. CD к исходному каталогу, где Вы хотите переименовать расширения файла рекурсивно.

  2. Введите эту команду:

    ren *.[CurrentFileExtension] *.[DesiredFileExtension]
    
0
ответ дан 07.12.2019, 08:45

Я нашел этот сценарий 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 выше для взятия его 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

Весело проведите время со вторым :)

0
ответ дан 07.12.2019, 08:45

Теги

Похожие вопросы