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


回答:


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 08年

バッチプログラムでFORコマンドを使用するには、%変数の代わりに%%変数を指定します。
トムロビンソン

cwd'ingせずに別のソースディレクトリにこれをどのように行いますか?
エヴァンキャロル

私はこれを使用して、すべてのファイル内のすべての「%20」ファイルをプレーンな「」に置き換えようとしています。どうすればいいですか?
マイクウォーレン14

@RobKam、私は実際にforループを動作させますが、1つのファイルのみの名前を変更します。複数のファイル拡張子が機能することを認識するようにワイルドカードを設定するにはどうすればよいですか*.*
DJクレイズ16

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ボックスでmoveコマンドを使用して小さな例を実行しただけで、機能しました。すべてのファイルとディレクトリがソースからデスティネーションに移動されました。sourceとdestはディレクトリ名です。

移動元dest
ver

Microsoft Windows XP [バージョン5.1.2600]
移動/?

ファイルを移動し、ファイルとディレクトリの名前を変更します。

1つ以上のファイルを移動するには:
移動[/ Y | / -Y] [ドライブ:] [パス]ファイル名1 [、...]宛先

ディレクトリの名前を変更するには:
移動[/ Y | / -Y] [ドライブ:] [パス] dirname1 dirname2

  [ドライブ:] [パス]ファイル名1ファイルの場所と名前を指定します
                          または移動したいファイル。
  destinationファイルの新しい場所を指定します。先
                          ドライブ文字とコロンで構成できます、
                          ディレクトリ名、または組み合わせ。動いている場合
                          ファイルが1つだけの場合、ファイル名を含めることもできます。
                          移動するときにファイルの名前を変更する必要があります。
  [ドライブ:] [パス] dirname1名前を変更するディレクトリを指定します。
  dirname2ディレクトリの新しい名前を指定します。

  / Y確認のプロンプトを抑制します
                          既存の宛先ファイルを上書きします。
  / -Y上書きすることを確認するプロンプトを表示します
                          既存の宛先ファイル。

スイッチ/ Yは、COPYCMD環境変数に存在する場合があります。
これは、コマンドラインで/ -Yで上書きできます。デフォルトは
MOVEコマンドが実行されていない限り、上書きを促す
バッチスクリプト内。

再帰的な名前変更を本当に探しています。申し訳ありませんが、質問の一部として移動を含めました。
javamonkey79 08年

1

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


1
xcopyはデフォルトで隠しファイルを無視することを忘れないでください。
リチャードハリソン

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

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

ファイルに保存するには、拡張子から拡張子までの2つの引数を指定します。

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

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

注:これは、10月26日13時20分にRob Kamが回答した投稿の修正です。彼は与えた

/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. ファイル拡張子の名前を再帰的に変更するソースディレクトリに移動します。

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

    ren *.[CurrentFileExtension] *.[DesiredFileExtension]
    

1
これはcwdに対しては正常に機能しますが、サブディレクトリに対しては機能しないため、再帰的ではありません。ありがとうございます:)
javamonkey79 08年

0

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

1
新しい回答を作成する代わりに、追加した回答を編集するだけです。
LostBalloon

0

Powershellはあなたの友達です。バッチファイルやスクリプトは必要ありません。たとえば、リモートディレクトリですべての.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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.