web-dev-qa-db-ja.com

フォルダー内のすべてのファイルのファイル名から特定の文字を置換または削除します

特定の文字を削除したり、バッチファイルの実行によって特定の文字を他の文字に置き換えたりするには、Windowsフォルダー内のすべてのファイルのファイル名を一度に実行するには、DOSコマンドが必要ですか?

51
VS1

PowerShellを使用して、DOSプロンプトに対してよりスマートな操作を行います。ここでは、スペースを含む現在のディレクトリ内のすべてのファイルとディレクトリの名前を_アンダースコアに置き換えることで、一括して名前を変更する方法を示しました。

Dir |
Rename-Item -NewName { $_.Name -replace " ","_" }

EDIT:
オプションで、Where-Objectコマンドを使用して、filtercmdlet(command-let)。以下は、それがあなたに与えることができる柔軟性を説明するためのいくつかの例です:

  • ドキュメントファイルをスキップするには

    Dir |
    Where-Object { $_.Name -notmatch "\.(doc|xls|ppt)x?$" } |
    Rename-Item -NewName { $_.Name -replace " ","_" }
    
  • ディレクトリのみを処理するには(3.0より前のバージョン)

    Dir |
    Where-Object { $_.Mode -match "^d" } |
    Rename-Item -NewName { $_.Name -replace " ","_" }
    

    PowerShell v3.0では、新しいDirフラグが導入されました。 Dir -Directoryを使用することもできます。

  • すでにアンダースコア(またはその他の文字)が含まれているファイルをスキップするには

    Dir |
    Where-Object { -not $_.Name.Contains("_") } |
    Rename-Item -NewName { $_.Name -replace " ","_" }
    
86
Ravi Thapliyal

特定の文字を削除または名前変更するWindows PowerShellの1行コマンドは次のとおりです。 (ここでは空白がアンダースコアに置き換えられています)

Dir | Rename-Item –NewName { $_.name –replace " ","_" }
30
aphoe

PowerShellの回答は適切ですが、Rename-Itemコマンドは、すべてのファイルに不要な文字が含まれていない限り、同じターゲットディレクトリで機能しません(重複が見つかった場合は失敗します)。

あなたが私のようで、良い名前と悪い名前が混在している場合は、代わりにこのスクリプトを試してください(スペースをアンダースコアに置き換えます):

Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") }
11
Dustin Malone

このバッチファイルは役立ちますが、いくつかの制限があります。ファイル名の文字=と%は置き換えることができません(ここからメモリに移動します)。ファイル名の^も問題になる可能性があります。

下部ブロックの各行のこの部分%newname: =_%では、:の後の文字を=の後の文字に置き換えます。したがって、文字の束はアンダースコアに置き換えられます。

echoを削除すると、renコマンドがアクティブになるまでコンソールウィンドウにコマンドが出力されるだけなので、renコマンドをアクティブにします。

/sをDIRコマンド部分に追加しない限り、現在のフォルダーのみを処理し、現在のフォルダーの下にあるすべてのフォルダーも処理します。

特定の文字を削除するには、=記号の後の文字を削除します。 %newname:z=%では、このようなエントリはすべてのz文字を削除します(大文字と小文字は区別されません)。

@echo off
for /f "delims=" %%a in ('dir /a:-d /o:n /b') do call :next "%%a"
pause
GOTO:EOF
:next
set "newname=%~nx1"

set "newname=%newname: =_%"
set "newname=%newname:)=_%"
set "newname=%newname:(=_%"
set "newname=%newname:&=_%"
set "newname=%newname:^=_%"
set "newname=%newname:$=_%"
set "newname=%newname:#=_%"
set "newname=%newname:@=_%"
set "newname=%newname:!=_%"
set "newname=%newname:-=_%"
set "newname=%newname:+=_%"
set "newname=%newname:}=_%"
set "newname=%newname:{=_%"
set "newname=%newname:]=_%"
set "newname=%newname:[=_%"
set "newname=%newname:;=_%"
set "newname=%newname:'=_%"
set "newname=%newname:`=_%"
set "newname=%newname:,=_%"

echo ren %1 "%newname%
8
foxidrive