web-dev-qa-db-ja.com

Windowsでファイルを再帰的に名前変更または移動するには、どのコマンドを使用できますか?

Windowsのどのコマンドが、Unixからの再帰的な移動/名前変更コマンドをエミュレートしますか?

40
javamonkey79

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
57
Rob Kam

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).
3
Lance Miller

Windowsで小さな例を実行しただけですXP SP2ボックスでmoveコマンドを実行すると動作しました。すべてのファイルとディレクトリがソースから宛先に移動されました。ソースと宛先はディレクトリ名です。

ソースの移動先を移動
 ver 
 
 Microsoft Windows XP [Version 5.1.2600] 
 move /?

ファイルを移動し、ファイルとディレクトリの名前を変更します。
 
 1つ以上のファイルを移動するには:
 MOVE [/Y |/-Y] [ドライブ:] [パス]ファイル名1 [、...]宛先
 
ディレクトリの名前を変更するには:
 MOVE [/ Y |/-Y] [ドライブ:] [パス]ディレクトリ名1ディレクトリ名2 
 
 [ドライブ:] [パス]ファイル名1移動するファイル
の場所と名前を指定します。
 destinationファイルの新しい場所を指定します。宛先
は、ドライブ文字とコロン、
ディレクトリ名、またはその組み合わせで構成できます。 
ファイルを1つだけ移動する場合、
ファイルを移動するときにファイル名を変更する場合は、ファイル名を含めることもできます。
 [drive:] [path] dirname1指定名前を変更するディレクトリ。
 dirname2ディレクトリの新しい名前を指定します。
 
/Y既存の宛先ファイルを上書きするかどうかを確認するプロンプトを表示しません
 。
/-Y既存の宛先ファイルを上書きするかどうかの確認を求めます
。
 
スイッチ/ YがCOPYCMD環境変数に存在している可能性があります。 
これは、コマンドラインの/ -Yで上書きされる場合があります。デフォルトは
で、
からバッチスクリプト内でMOVEコマンドが実行されていない限り、上書きを確認します。
2
Jorge Ferreira

組み込みのXCOPYコマンドは終了しています。再帰的なコピーを行いますが、名前の変更をサポートしているとは思いません。

1
Clayton

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
1
Roy Rico
for /r %%x in (%1) do ren "%%x" %2

これはファイルの名前を再帰的に変更します:-)

ファイルに保存すると、拡張子から拡張子までの2つの引数が与えられます。

例:ファイル名はtest.batコマンドです:test * .avi * .bmp

拡張子がaviのすべてのファイルの名前をbmpに変更します(すべてのサブフォルダーで:))。

注:これは、ロブカムが10月26日13:20に回答した投稿に対する修正です。彼はのために与えた

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

ここでの代わりに%%を使用します

1
satya

ほとんどのUNIXコマンドにはWindowsポートがあります。

1
Orrin

私はこれを見つけました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。コウモリ:

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

2番目のものを楽しんでください:)

0
javamonkey79

簡単なDOSコマンドを使用します。

  1. ファイル拡張子の名前を再帰的に変更するソースディレクトリにcdします。

  2. 次のコマンドを入力します。

    ren *.[CurrentFileExtension] *.[DesiredFileExtension]
    
0
Madhu Kumar

Powershellはあなたの友達です。バッチファイルやスクリプトは必要ありません。たとえば、リモートディレクトリですべての.tiffファイルの名前を.tifに再帰的に変更するには、Powershellから次のコマンドを実行します。

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

0
Reba

追加した if existファイルがすべてのフォルダーに存在しない場合にエラーが返されないようにする(Jenkinsでは重要なので、ビルドが中断されません)。

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
0
Akira Yamamoto