2017-06-12 20 views
0

PwerShell Rename-Itemコマンドレットでファイルの名前を変更しようとしました。コードはPowerShell Rename-Item

Get-ChildItem -recurse * | ?{!$_.PsIsContainer} | Rename-Item -NewName {$_.FullName -Replace '[email protected]','[email protected][email protected][email protected]_E.com'} 

ですが、PwerShelは常に長いパスまたはファイル名について教えてくれます。私はファイル名が長い名前を持っていることを知っています。しかし、これは新しい命名を守ることが強く必要です。

このエラーを除く方法

+0

'-NewName'は**文字列**でなければなりませんが(' {} 'は_ScriptBlock_を示します)' -NewName $($ _。FullName -Replace '.abcd @ email.com'、 '。abcd @ email_A.com.abcd @ email_B.com.abcd @ email_E.com ') ' – JosefZ

+0

こんにちは!答えてくれてありがとう。私があなたが言及したのが好きなら、メッセージでエラーが表示されます: "Rename-Item:引数がnullであるため、パラメータ 'NewName'にバインドできません。 – Alex

+0

@JosefZ https://blogs.msdn.microsoft.com/powershell/2006/06/23/flexible-pipelining-with-scriptblock-parameters/セクション「ScriptBlock Parameters」 - スクリプトブロックをパラメータとして渡すスクリプトブロックタイプが有効であることを指定すると、動的に評価されます。 – TessellatingHeckler

答えて

1

コード例についてお尋ねできますか?以下コードスニペット(保守的なアプローチ)を助けることができるコメント:

Get-ChildItem -recurse * | Where-Object {!$_.PsIsContainer} | 
    ForEach-Object { 
    ### in regular expression: ↓   ↓ escape dots 
    $NewName = $_.Name -Replace '\[email protected]\.com', 
     '[email protected][email protected][email protected]_E.com' 

    ### here is rigt place to check target filename length: 
    $targetLength = 1 + $_.DirectoryName.Length + $NewName.Length 

    Rename-Item -Path $_.FullName -NewName $NewName 
    } 

読むRename-Item基準とRegular Expression Language - Quick Reference