web-dev-qa-db-ja.com

ディレクトリ内のすべてのファイルの名前をWindowsバッチスクリプトで変更する

ディレクトリ内のすべてのファイルの名前を変更するバッチまたはcmdファイルを作成するにはどうすればよいですか? Windowsを使用しています。

これを変える:

750_MOT_Forgiving_120x90.jpg
751_MOT_Persecution_1_120x90.jpg
752_MOT_Persecution_2_120x90.jpg
753_MOT_Hatred_120x90.jpg
754_MOT_Suffering_120x90.jpg
755_MOT_Freedom_of_Religion_120x90.jpg
756_MOT_Layla_Testimony_1_120x90.jpg
757_MOT_Layla_Testimony_2_120x90.jpg

これに:

750_MOT_Forgiving_67x100.jpg
751_MOT_Persecution_1_67x100.jpg
752_MOT_Persecution_2_67x100.jpg
753_MOT_Hatred_67x100.jpg
754_MOT_Suffering_67x100.jpg
755_MOT_Freedom_of_Religion_67x100.jpg
756_MOT_Layla_Testimony_1_67x100.jpg
757_MOT_Layla_Testimony_2_67x100.jpg
14
Blainer

名前をループするためのFORステートメント(ヘルプの場合はFOR /?と入力)、および文字列の検索と置換(ヘルプの場合はSET /?と入力)。

@echo off
setlocal enableDelayedExpansion
for %%F in (*120x90.jpg) do (
  set "name=%%F"
  ren "!name!" "!name:120x90=67x100!"
)


UPDATE-2012-11-07

RENAMEコマンドがワイルドカードをどのように扱うかを調査しました: Windows RENAMEコマンドはワイルドカードをどのように解釈しますか?

この特定の問題は、バッチスクリプトを使用せずにRENAMEコマンドを使用して非常に簡単に解決できることがわかりました。

ren *_120x90.jpg *_67x100.*

_の後の文字数は関係ありません。 120x90xまたはxxxxxxxxxxになった場合、名前の変更は引き続き適切に機能します。この問題の重要な側面は、最後の_.の間のテキスト全体が置き換えられることです。

24
dbenham

Windows 7では、PowerShellの1行でこれを実行できます。

powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}"

説明

powershell -C "..."はPowerShellセッションを起動して、引用符で囲まれたコマンドを実行します。コマンドが完了すると、外側のシェルに戻ります。 -C-Commandの略です。

gciは、現在のディレクトリ内のすべてのファイルを返します。 Get-ChildItem のエイリアスです。

| % {...}は、各ファイルを処理するパイプラインを作成します。 %Foreach-Object のエイリアスです。

$_.Nameは、パイプライン内の現在のファイルの名前です。

($_.Name -replace '120x90', '67x100')は、 -replace 演算子を使用して新しいファイル名を作成します。最初の部分文字列が出現するたびに、2番目の部分文字列に置き換えられます。

rniは、各ファイルの名前を変更します。最初のパラメーター(-Pathと呼ばれる)はファイルを識別します。 2番目のパラメーター(-NewNameと呼ばれる)は、新しい名前を指定します。 rniRename-Item のエイリアスです。

$ dir
 Volume in drive C has no label.
 Volume Serial Number is A817-E7CA

 Directory of C:\fakedir\test

11/09/2013  16:57    <DIR>          .
11/09/2013  16:57    <DIR>          ..
11/09/2013  16:56                 0 750_MOT_Forgiving_120x90.jpg
11/09/2013  16:57                 0 751_MOT_Persecution_1_120x90.jpg
11/09/2013  16:57                 0 752_MOT_Persecution_2_120x90.jpg
               3 File(s)              0 bytes
               2 Dir(s)  243,816,271,872 bytes free

$ powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}"

$ dir
 Volume in drive C has no label.
 Volume Serial Number is A817-E7CA

 Directory of C:\fakedir\test

11/09/2013  16:57    <DIR>          .
11/09/2013  16:57    <DIR>          ..
11/09/2013  16:56                 0 750_MOT_Forgiving_67x100.jpg
11/09/2013  16:57                 0 751_MOT_Persecution_1_67x100.jpg
11/09/2013  16:57                 0 752_MOT_Persecution_2_67x100.jpg
               3 File(s)              0 bytes
               2 Dir(s)  243,816,271,872 bytes free