2017-07-06 19 views
0

〜40個のフォルダにある数千のファイルがあります(これらのサブフォルダは同じスーパーフォルダにあり、「test」と呼ばれます)。私はpowershellを使用して、フォルダ名にある構文だけでなく、ファイル名に置き換えようとしました。Windows Powershellのバッチファイルとフォルダの名前変更

基本的に私のフォルダやファイルは私が最初のファイルに関心の&フォルダをマッピングするために使用されるコードは「PXXXX_」ここ

に名前を変更するバッチにしたい「PXXXX_0」の文字と同じ文字列が含まれ

cd C:\test 

Get-ChildItem -Filter "*PXXXX_0*" -Recurse | Rename-Item -NewName {$_.name -replace 'PXXXX_0', 'PXXXX_'} -whatif 

これが唯一のファイルの、だからこれが動作しているようです例えば

What if: Performing operation "Rename File" on Target "Item: C:\test\PXXXX_053\PXXXX_053_558.jpg Destination C:\test\PXXXX_053\PXXXX_53_558.jpg 

(私の右のファイルを与え、行動をプレビュー私も名前を変更したいフォルダの中に入れてください。私は...唯一のフォルダ名、ファイルではなく、名前を変更されていることが表示されます-whatifなし

をコードを起動した場合

は今、私はかなり確信して私が何かを見逃しているが、私は、この言語には本当に慣れていないよので、私は解決策を見つけるのに苦労しています。私はPowershell v1.0を使用しています

ありがとうございました。

ベスト

+4

フォルダの名前が変更されると、その名前の下にフォルダが存在しないため、フォルダ内のファイルパスが間違っている可能性があります。 '.. -Recurse | where-object {-not $ _。PsIsContainer} 'をフィルタリングすることでファイルの名前を変更してみてください。名前変更 - 項目..'それをやり直してフォルダの名前を変更してください。 – TessellatingHeckler

+0

ありがとう、それは魅力のように働いた! – Rhiz

答えて

0

ワンライナー:

$items = get-childitem -filter "*PXXXX_0*" -Recurse; foreach ($item in $items) { $newName = $item.fullname -replace 'PXXXX_0', 'PXXXX_'; rename-item $item.fullname -NewName $newName; } 

眼球で簡単:要するに

$items = get-childitem -filter "*PXXXX_0*" -Recurse; 
foreach ($item in $items) { 
    $newName = $item.fullname -replace 'PXXXX_0', 'PXXXX_'; 
    rename-item $item.fullname -NewName $newName; 
} 

、PowerShellの1は、単にファイル名を持つファイルの名前を変更しないようにしようとしていましたフルパス。基本的には、サブフォルダに入っているときにファイルを見つけることができませんでした。

私はあなたのロジックをv5でテストしましたが、期待通りに動作します。

ここでは、PowerShell v1を使用しているので、System Center Orchestrator経由でこのスクリプトを実行しようとしていると仮定します。私はその痛みを感じました。 runbooksのすべてのPSスクリプトをinvoke-command -scriptblock {} -Credential $myCredsブロックにラップすることをお勧めします。これにより、ターゲットシステムのPowerShellバージョンへの実行が促進されます。また、-ComputerNameをタックして、runbookサーバーの代わりにターゲット上でスクリプトを実行するのも非常に簡単です。

次に、ユーザー名とパスワードのペアをOrchestrator変数として保存して(暗号化オプションを使用)、上記のget-credentialステートメントに挿入することができます。最初は非常に面倒ですが、あなたはそれに慣れています。これをテストする

、私はここで-version 1でPowerShellを走った私の$ PSVersionTableです:

Name       Value 
----       ----- 
CLRVersion      2.0.50727.8689 
BuildVersion     6.1.7600.16385 
PSVersion      2.0 
WSManStackVersion    2.0 
PSCompatibleVersions   {1.0, 2.0} 
SerializationVersion   1.1.0.1 
PSRemotingProtocolVersion  2.1 

それは同じ問題を抱えていたが、それはOrchestratorがために何が起こっているかに1つの試合のための1ではないかもしれませんそれがうまくいかないと私はベストを尽くします。

関連する問題