2016-03-22 3 views
0

私はこれに関する解決策を探しています。私は次のようになり、ファイルの膨大な数を持っているバッチファイルでファイル名のパターンを見つける

{some_texthere_133}_Ritem_123.xml 
{some_texthere_233}_Ritem_456.xml 
{some_texthere_333}_Ritem_564.xml 

私はテキストを含む、現在のディレクトリにあるファイル名を検出したり、外部のアンダースコアが続く接頭辞として括弧内にアンダースコアしたいと思いますそれだけでなく、ファイル名のその部分を削除します。

Ritem_123.xml 
Ritem_456.xml 
Ritem_789.xml 

上記のフォーマットが結果である必要があります。 誰でも私を助けることができます。

+0

@ aschipfl ...これは、私が見つけたコマンドの1つです。@ ECHO OFF FOR %% F IN( "[] *")DO CALL:プロセス "%% F" GOTO:EOF:プロセスSET oldname =%1 SET "newname =%〜nx1" SET "newname =%newname:] =%" RENAME%oldname% "%newname%" ....大括弧とスペースがある場合はうまく動作します。 ??? – rahul

+0

コードを編集して質問に含めてください。ありがとう! – aschipfl

+0

@ a_horse_with_no_name - ファイル名がRitem_121.xmlに変更されている場合は非常に便利です Ritem_452.xml Ritem_783.xml ...最後の数字が1から9に番号が変更されました。 – rahul

答えて

1

ピュアバッチ:

@echo off 
setlocal disableDelayedExpansion 
for /f "delims=" %%F in ('dir /b /a-d {*}_*') do (
    set "file=%%F" 
    setlocal enableDelayedExpansion 
    ren "!file!" "!file:*}_=!" 
    endlocal 
) 

あなたはファイル名のどれも!文字が含まれていないことがわかっている場合は、そのコードはに簡単になります。

@echo off 
setlocal enableDelayedExpansion 
for /f "delims=" %%F in ('dir /b /a-d {*}_*') do (
    set "file=%%F" 
    ren "!file!" "!file:*}_=!" 
) 

それともJREN.BAT - a regular expression file renaming batch utilityを使用することができます。これは、XP以降の任意のWindowsマシンでネイティブに実行される純粋なスクリプト(ハイブリッドJScript /バッチ)です。バッチファイルを作成して使用できるサイトではこれを使用しても問題ありません。リンクからJREN.BATという名前のファイルにコードをコピーするだけです。

jren "^{.*?}_" "" 

コマンドをバッチスクリプト内に入れる場合は、CALL JRENを使用する必要があります。

JRENは非常に強力で便利なリネームツールです。ページングされた出力が必要な場合は、jren /?またはjren /??を介してコマンドラインから完全なドキュメントを入手できます。

0

正規表現リネマを使用したいと思います。 私はあなたがこの質問の間違った種類のフォーラムにいると思います。

Hereが考えられます。

私はnotepad ++を使用してビット周辺をテストしました。 すべての正規表現関数がまったく同じではないので、慎重に進んでください。

正規表現:

$1 

いくつかの説明を::

\{[^}]+\}_(Ritem_\d+.xml) 

は、置換後の文字列

  • \{\}は通常中括弧ある
  • [^}]+は何もBであります閉鎖中かっこ、1回以上
  • (...)マークaグループ
  • \d+小数点以下を1回以上繰り返します。

交換用のみ$1。置換するときは、一致したグループを使用できます。 $0はあなたがマッチしたすべてです。 $1は、最初のグループカッコ内にあります。

正規表現の詳細については、regex cheat sheetでさらに多くのオプションを参照してください。

+0

@ johannes..iこのタスクが必要です私は職場でこれを実行する必要があるので、他のソフトウェアを使用することはできません。 – rahul

+0

@rahulあなたの雇用主に相談してください、確かに彼はあなたがあなたの仕事を間に合わせることを望んでいます。 – Johannes

+0

@ johannes..yesですが、cmdのみを使用します。 – rahul

0
ren *Ritem_???.xml Ritem_???.xml 

EDIT:

はこれを試してみてください:

@echo off 

setlocal enableDelayedExpansion 
for %%# in ("{*}*") do (
    for /f "tokens=1,2,3,4 delims=_" %%a in ("%%#") do (
    ren "%%#" "%%b_%%c_%%d" 
) 
) 
+0

これは動作しません。 – rahul

+0

@rahul - 同じ末尾の数字を持つファイルはありますか? – npocmaka

+0

いいえ..例と同じです。ファイル名はRstoreItem_1234_20160322(ファイルが作成された日時)、 – rahul

0

をこの方法では、アンダースコアの数を "}" であってもよいだれでも後:

@echo off 
setlocal EnableDelayedExpansion 

rem Process all files, split the name at the "}" 
rem ie: "%%a" = "{5gnf-kjg6-kjg8-tyr9", "%%b" = "_RstoreItem_1234_20160322182705.xml" 

for /F "tokens=1* delims=}" %%a in ('dir /B "{*}*"') do (

    rem Get the part after the "}", ie: "_RstoreItem_1234_20160322182705.xml" 
    set "name=%%b" 

    rem Do the rename, exclude the first char from the name, ie: "RstoreItem_1234_20160322182705.xml" 
    ren "%%a}%%b" "!name:~1!" 

) 
関連する問題