2012-02-21 20 views
13

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

窓や何の.batまたは.cmdのファイルで動作しますか? – Blainer

+0

あなたが助けを望むならば、みんなが霊的であることを期待することはできません。 –

答えて

22

Aの名前(ヘルプ用タイプFOR /?)をループする声明、および文字列の検索と置換(ヘルプ用タイプSET /?)FOR 。

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


UPDATE - 2012年11月7日

私は、ワイルドカードをどのようにRENAMEコマンドお得な情報を調査しました:How does the Windows RENAME command interpret wildcards?

それは、この特定の問題が非常に簡単に解決することができることが判明バッチスクリプトを必要とせずにRENAMEコマンドを使用します。

ren *_120x90.jpg *_67x100.* 

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

+2

これが完全な例であるかどうかはわかりません。しかし、[This](http://stackoverflow.com/a/3811991)は私のために魅力的に働いてくれました:) –

+2

@Anand - RENコマンドだけではるかに単純なソリューションを追加しました。あなたのコメントのリンクは、基本的に私の元の答えと同じです。 – dbenham

+0

あなたは2つの答えを分けることができますか?私はこの中に「レン」ワンライナーを残すだろう。それは最高! –

8

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演算子を使用して新しいファイル名を作成します。第1の部分文字列の各出現は、第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 
+0

@MethodManタイムスタンプにはどのような値がありますか? –

+0

私はRobbCopyスクリプトを使いこなし、batファイル内にgoto関数を作成することでそれを理解しました。私はpowershellにはあまり慣れていませんが、タイムスタンプ値を持っていなければならないと、マスクで 'yyyymmddss'それはファイルの数に応じて '_1 _2 _3 etc ... 'を持ちます。私はrobocopyを使ってバッチファイルでこれを行うことができました。 – MethodMan

関連する問題