2012-04-24 22 views
3

サブフォルダとこの形式のファイル名がfilename_ex.docのファイルを含むフォルダAのファイルの名前を一括して変更し、filename.docのようにする方法はありますか?cmdバッチファイルの名前を変更するサブフォルダ/ファイル

私はしばらくこれをやろうとしてきましたが、それは叙事詩的な失敗でした。助けてください。

+0

@MartinJames私はバッチ「プログラミング」をしようとしていますたびに、私は、私は決して私は/ F FOR試した手順;-) –

+0

中に開発コードスニペットのいずれかを掲示することを、とても巨大な失敗FOR/Dすべてのものを読んで、ここからdocuを読んでください:[link](http://ss64.com/nt/for.html)。まあまあ良い結果はありません:(私は本当にWindowsのバッチプログラミングを嫌っています。 – Alex

+0

@MartinJames:コマンドラインからも試してみました: 'tokens = 1-3 delims = _。"%a( 'dir * _ex.ext ')do echo%a_%b。%c' ...フォルダ/サブフォルダやその他のファイル(PATH)に "。"と "_"が含まれていれば、これは詰まってしまいます – Alex

答えて

3

私は、Martin Jamesに対する2番目のコメントの方向性に問題があったサブフォルダ内のファイルの名前を変更するとします。私はあなたがDIR/Sオプションでそのコードを試したと思います。しかし、あなたはとても近かったです:-)あなたはちょうど2つのループを使用する必要がありました!

編集固定コード出力が正しく見えたら、ECHOを機能させるためにドロップします。

@echo off 
for /r %%D in (.) do (
    pushd "%%~fD" 
    for /f "tokens=1-3 delims=_." %%A in ('dir /b *_ex.ext 2^>nul') do echo ren "%%A_%%B.%%C" "%%A.%%C" 
    popd 
) 

上記の限り、各ファイル名が_ex.extに表示される内容以外の_または.を持っていないように動作します。パス内の文字は問題にならないはずです。ファイル名だけが問題です。

ここでは、ファイル名(ユニコード名を除く)で動作するより堅牢なソリューションです。それはまたかなり速いです。これは部分文字列演算を使用するため、名前から取り除く文字数を知る必要があります。あなたの例では3文字です。結果のコマンドが正しく見えると、再びECHOを削除します。

@echo off 
setlocal disableDelayedExpansion 
for /f "delims=" %%F in ('dir /b /s *_ex.ext') do (
    set "old=%%F" 
    set "new=%%~nF" 
    setlocal enableDelayedExpansion 
    echo ren "!old!" "!new:~0,-3!.ext" 
    endlocal 
) 
+0

アンダースコアサブフォルダとファイル名の名前に? – Alex

+0

私はそれをテストしましたが、うまくいきませんが、何が間違っているかを確認します。ありがとう – Alex

+0

@Alex - 動作しなかったと言います。より堅牢で高速な代替案を追加しました。 – dbenham

関連する問題