renが単純な名前変更タスクで「e」を残すのはなぜですか


0

名前を一括変更したいファイルのリストがあります。

ソースファイル名は「SlideXX.BMP」です(XXは1から任意の番号です)。

それらをすべて「bbrdXX.BMP」に名前変更したいと思います

ren Slide* bbrd*ren を実行すると、renが実行されますが、予想とは異なり、すべてが「bbrd e XX.BMP」になります。

なぜこれが起こるのですか?


ファイル名の最初の4文字を置き換える場合の名前変更コマンド。したがって、5番目の文字eは元のファイル名から保持されます。サードパーティの名前変更機能を使用しない限り、目的の操作を行うには非常に複雑なスクリプトが必要です。
AFH

これにより、PowerShellで必要な処理が実行されます$x = gci C:\yourpath | % { gi $_.FullName | rni -newname ($_ -replace "Slide","bbrd") }。フォルダーとサブフォルダーにファイルがある場合は、ファイルを再帰的に検索-rしてgci呼び出しに追加します
SimonS

これは確かにそれをしました!どうもありがとうございました!あなたが気にしないなら、あなたはの意味を説明しても | %いいですか?
武智慎太郎

回答:


0

これについてはPowerShellを使用します。cmdでは、目的を達成するためにもう少し複雑になる可能性があります。

$x = gci C:\yourpath | % { gi $_.FullName | rni -newname ($_ -replace "Slide","bbrd") }

詳細に:

  • 最初に、Get-ChildItemエイリアスを持つディレクトリ内のすべてのファイルを検索しますgci
  • 次に、foreach-objectエイリアスを使用して各ファイルをループします%
  • 次にfullnameget-itemエイリアスを持つプロパティによってアイテムを呼び出しますgi
  • 次に、アイテムはパイプラインに渡され、rename-itemエイリアスによって名前が変更されますrni
  • rniパーツの内部Slidebbrdは、現在のオブジェクトに置き換えられ、新しい名前で保存されます。

名前を変更する必要のあるファイルも内部にあるサブフォルダーがある場合、これを再帰的に実行する-rには、gci呼び出しに追加し、必要なfilterファイルのみをターゲットに追加します:

$x = gci C:\yourpath -r -filter *.bmp | % { [...] }


0

スライドの長さは5文字です。BBRDは4文字の長さです。bbrd_を使用できる場合、eも置き換えられます。2つのステップを実行する場合:

  • ren "スライド*" "/ "
  • ren lide * bbcd *

最初のrenはSを削除するか、長さを1つ減らします。2番目のrenは、lideにも4文字あるため、エラーなしでbbrdに変換します


最初のren作品は動作しますか?「システムは指定されたファイルを見つけることができません」
武智慎太郎

期間が忍び込んだ、私はそれを変更しました。
-bvaughn

0

バッチではcomplexスクリプトが必要だとは思いません。それは次のように簡単です

@echo off & setlocal EnableExtensions EnableDelayedExpansion
for %%A in (Slide*.bmp) do Set A=%%~nxA&Ren "%%A" "!A:Slide=bbrd!"

DelayedExpansionがデフォルトで有効になっている場合、コンソール1ライナーでもあります。

for %A in (Slide*.bmp) do Set A=%~nxA&Ren "%A" "!A:Slide=bbrd!"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.