64

Windowsフォルダー内のすべてのファイルのファイル名を一度にバッチファイルを実行して、特定の文字を削除したり、特定の文字を他の文字に置き換えたりするにはどうすればよいですか?そのためのDOSコマンドはありますか?

4

5 に答える 5

110

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

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

EDIT :
必要に応じて、このWhere-Objectコマンドを使用して、後続のコマンドレット(コマンドに対して不適格なオブジェクトを除外できます以下は、それが提供できる柔軟性を示すいくつかの例です。

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

    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 " ","_" }
    
于 2013-05-19T19:03:54.063 に答える
18

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

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

Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") }
于 2016-02-16T13:20:22.393 に答える
9

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

%newname: =_%下部ブロックのすべての行のこの部分では、文字の後の文字が文字:の後の文字に置き換え=られるため、そのままでは一連の文字がアンダースコアに置き換えられます。

を削除しechoて ren コマンドを有効にします。実行するまでコマンドがコンソール ウィンドウに出力されるだけです。

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

特定の文字を削除するには、= 記号の後の文字を削除します。この%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%
于 2013-05-19T18:04:06.347 に答える
-3

rename これにはコマンドをお勧めします。ren /? 詳細については、コマンド ラインに入力してください。

于 2013-05-19T17:24:37.040 に答える