質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

解決済

ファイル名の一部を一括変更

tkmnusr
tkmnusr

総合スコア430

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

2回答

1評価

1クリップ

21823閲覧

投稿2019/12/14 03:14

編集2019/12/24 14:47

前提・実現したいこと

コマンドプロンプトやPowerShell等、Windows標準機能の中で、下記のように複数ファイルのファイル名の一部を一括変更したいのですが、どのようにすればよいでしょうか?
ご教示お願いします。

現在のディレクトリから、最下層のファイルまで、ファイル名の中の[test1]の文字列を[test]に変更したいと思っています。 ファイル名のaaaやbbbやcccの文字やディレクトリのdddやgggの名前等は任意です。 ファイル数やディレクトリ数やディレクトリの階層数も任意です。 //置換前。 │ aaa[test1].txt │ bbb[test1].txt │ ccc[test1].txt │ └─ddd │ eee[test1].txt │ fff[test1].txt │ └─ggg hhh[test1].txt //置換後。 │ aaa[test].txt │ bbb[test].txt │ ccc[test].txt │ └─ddd │ eee[test].txt │ fff[test].txt │ └─ggg hhh[test].txt

試したこと

コマンドプロンプト

>ren *[test1].txt *[test].txt

現在の階層のファイルのみが名前変更されました。
最下層のサブフォルダまで一括で変更する方法はありませんか?
もしくは、ディレクトリは別コマンドで変更するとして、ファイルだけでも最下層まで一括で変更する方法はありませんか?

補足情報(FW/ツールのバージョンなど)

Windows 10

### 追記

@echo off ren *[test1].txt *[test].txt for /r /d %%A in (*) do ( pushd %%A ren *[test1].txt *[test].txt popd ) for /r /d %%B in (*[test1]) do call :rename %%B exit/b :rename set A=%1 ren %A% %A:[test1]=[test]% exit/b pause

### 追記②

pauseを打って、処理の経過を調べてみました。

@echo off ren *[test1].txt *[test].txt for /r /d %%A in (*) do ( pushd %%A ren *[test1].txt *[test].txt popd ) pause for /r /d %%B in (*[test1]) do call :rename %%B pause exit /b :rename set A=%1 echo %A% rem ren %A% %A:[test1]=[test]% ←ここをコメントアウトするかしないかでエラーメッセージの出る出ないが変わる。 exit /b

コメントアウトしなかった場合、echo %A%の後に下記エラーが出力される。
コメントアウトした場合はエラーメッセージが出力されない。

コマンドの構文が誤っています。

### 追記③

ren %A% %A:[test1]=[test]%

上記がフォルダ名の一部変更ができる書き方かと思うのですが、コードが理解できていないため、
質問1と質問2があります。
「フォルダ 名前 一部変更 ren」などで検索してるのですが、なかなか情報が出てきませんでした。

質問1。
追記②のrenをmoveに変えて、意図した処理はできました。
ただ、追記②のrenをmoveに変えた書き方ならば、サブルーチンで書かない方法でもできるのではないかと思ったのですが、コードの書き換えができませんでした。
下記のように試したりしました。

@echo off ren *[test1].txt *[test].txt for /r /d %%A in (*) do ( pushd %%A ren *[test1].txt *[test].txt popd ) for /r /d %%B in (*[test1]) do call :rename %%B move %B% %B:[test1]=[test]% exit /b

質問2。
最上位階層ではどのようにすればフォルダ名の一部変更ができますか?

@echo off ren *[test1].txt *[test].txt rem 最上位階層ではどうすればフォルダ名の一部を変更できますか? ren *[test1] *[test] ←これではフォルダ名は変更できない。 for /r /d %%A in (*) do ( pushd %%A ren *[test1].txt *[test].txt for /d %%B in (*[test1]) do call :rename %%B exit /b popd ) :rename set A=%1 echo %A% ren %A% %A:[test1]=[test]% exit /b

### 追記④

質問1
サブルーチンを書かない方法を試しているのですが、意図した処理になりませんでした。

@echo off ren *[test1].txt *[test].txt for /r /d %%A in (*) do ( pushd %%A ren *[test1].txt *[test].txt popd ) for /r /d %%B in (*[test1]) do ( move %%B %%B:[test1]=[test]%% )

コードを理解していないので、下記なども試してみました。

move %B %%B:[test1]=[test]% move %%B %%B:[test1]=[test]%% move %%B %B:[test1]=[test]%

質問2
サブルーチンを書く方は、

@echo off ren *[test1].txt *[test].txt for /d %%B in (*[test1]) do call :rename %%B for /r /d %%A in (*) do ( pushd %%A ren *[test1].txt *[test].txt for /d %%B in (*[test1]) do call :rename %%B exit /b popd ) :rename set A=%1 echo %A% ren %A% %A:[test1]=[test]% exit /b

フォルダ直下と、その下のサブフォルダまでは名前変更できたのですが、
そのさらに下のサブフォルダの階層は、ファイルもフォルダも名前変更されませんでした。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。