_2から複数のファイルの名前を変更しています。へ。 「_2」サフィックスを削除したい
私の最初の回避策はしようとしています
ren *_2.* *.*
しかし、これは機能しません。ヘルプが作成されます。
_2から複数のファイルの名前を変更しています。へ。 「_2」サフィックスを削除したい
私の最初の回避策はしようとしています
ren *_2.* *.*
しかし、これは機能しません。ヘルプが作成されます。
回答:
次のバッチスクリプトを使用できます。
@echo off
setlocal enabledelayedexpansion
for /r %%G in (*_2.*) do (
set new=%%~nG
set new=!new:~0,-2!
ren "%%~G" "!new!%%~xG"
)
*_2.*
。_2
、各ファイル名(%%~nG
)からサフィックスを削除します。%%~xG
)を新しい名前に追加します。__2.bin --> _.bin
abc_def_2.txt --> abc_def.txt
2014_02_23_2.log --> 2014_02_23.log
これを小さな.cmdとして試すことができます:
@echo off
setlocal enabledelayedexpansion
for %%a in (*_2.*) do (
set fnm=%%a
echo ren !fnm! !fnm:_2.=.!
)
これはあなたが期待することをするようです(テスト実行で満足したらエコーを削除します)。
_2.
ファイル名に複数がある場合、考えられる問題が表示されます
編集:提案に従って不完全な提案を置き換えました
2014_02_23_2.log
。すべて_2
を空の文字列に置き換えてすべて削除すると、というファイルが作成され2014_023.log
ます。本当にOPが望んでいたものではありません。
PowerShellでこれを行う方法は次のとおりです(1行なので、必ず右にスクロールしてください)。
gci PATH\TO\YOUR\FOLDER\ | ? {!$_.PSIsContainer -and $_.BaseName.EndsWith("_2")} | ren -NewName {("{0}{1}" -f $_.BaseName.Substring(0, $_.BaseName.Length-2), $_.Extension)}
gciはGet-ChildItemのエイリアスです-ここにフォルダーへのパスを入力します。サブフォルダーがある場合は、パスの後に-Recurseを追加します
?は、Where-Objectのエイリアスです-ここでは、アイテムをループし、それがフォルダーではなく、その名前が「_2」で終わることを確認します(ファイル拡張子を除く)。
ren -Rename- Item-最後に、Where-Objectフィルターを通過したファイルの名前を変更します。Substringを使用して、ファイル名の最後の2文字を切り取ります。
これは、パターンが実際_2.*
にあり_2*.*
(数字2の後にない)、and31415として正しく指摘されているアンダースコアが1つだけであるという仮定の下でそれを行う必要があります- _
拡張子から(アンダースコア) からすべてを削除するため
for %i in (*_2.*) do (@for /f "delims=_ tokens=1" %j in ("%~ni") do @echo ren "%i" "%j%~xi")
ご注意:
-それは、コマンドラインから直接実行すると、1行だ
-それは今だけエコー(プリント)をコンソールにRENコマンドを。正しく実行されることを確認したら、削除@echo
して実際にファイルの名前を変更します。
abc_def_2.txt
。次に、コードの名前をに変更しますがabc.txt
、これは予期した結果ではありません。
JP SoftwareのTake Commandでそれを行うためのワンライナーはREN
次のとおりです。そのコマンドは正規表現をサポートするコマンドインタープリターです。
ren ::(.*)_2\.(.*) ::\1.\2