ディレクトリ内のすべてのファイルの名前を変更するバッチまたは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
名前をループするための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.*
_
の後の文字数は関係ありません。 120x90
がx
またはxxxxxxxxxx
になった場合、名前の変更は引き続き適切に機能します。この問題の重要な側面は、最後の_
と.
の間のテキスト全体が置き換えられることです。
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
と呼ばれる)は、新しい名前を指定します。 rni
は Rename-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