it-swarm-ja.com

ファイル名から#を削除するバッチスクリプト(特定のディレクトリのみ)

特定のディレクトリ(PDFドキュメント)内のファイル名から#文字を削除するスクリプトを探しています。

私はいくつかの同様の例を見てきましたが、それはすべて少し混乱しています!

1
David
@echo off &setlocal
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *#*.pdf') do (
    set "fname=%%~a"
    setlocal enabledelayedexpansion
    set "nname=!fname:#=!"
    ren "!fname!" "!nname!"
    endlocal
)
3
Endoro

2013年です。PowerShellを使用する必要があります。

Get-ChildItem | Where-Object {$_.Name -match '#'} | ForEach-Object { Rename-Item -Path $_.Name -NewName $($_.Name -Replace "#", "") -WhatIf }

問題のディレクトリに移動し、その行を実行します。 #が付いているすべてのファイルを検索し、それぞれの名前を変更します。 '-Whatif'を削除して、実際に操作を実行します。

エイリアスとデフォルトを使用する短いバージョンは次のようになります。

ls | ? {$_.Name -match "#"} | ForEach { rni $_.Name $($_.Name -Replace "#", "")}

少なくとも長いバージョンは、1980年代のバッチ構文よりも読みやすいように思えます。ここでの唯一の不可解な部分は、PowerShellの「$ 。Name」、「$」がループ内の現在のオブジェクトを参照していることです。ここではすべての場合で現在のファイルに。 -NewNameパラメーターの式が必要なため、$()にラップする必要があります。

2
Peter Hahndorf