2017-07-17 27 views
0

同じタイトルの話題はたくさんありますが、私のニーズに合わせてそれらを試したり修正したりしています。powershellを使用して、フォルダ名と除外を含むファイルの名前を変更してください。

これは私が達成したいものに近づきましたが、除外は機能しません。残りのフォルダ「フォルダ3」ではなく、すべてのサブフォルダのPDFファイルの名前が変更されます。またここで私は今まで私のために働いたことのない他の話題からの解決策を試しました。下記の構造を参照して、最初のサブフォルダの名前でサブフォルダのサブフォルダ内のすべてのPDFファイルの名前を変更された私は何を達成しようとしています

[string[]]$Path = @('C:\test\') 
[string[]]$Excludes = @('*folder 1*', '*Folder 2*') 
Get-ChildItem $Path -Filter *.pdf -Recurse | ?{$_.DirectoryName -notlike $Excludes } | Rename-Item -NewName { $_.Directory.Parent.BaseName + '-' + $_.Name } 

C:\test\2704814 
\Folder 1 
|- file1.pdf 
|- file2.pdf 
\Folder 2 
|- file1.pdf 
|- file2.pdf 
\Folder 3 
|- file1.pdf 
|- file2.pdf 
C:\test\2704815 
\Folder 1 
|- file1.pdf 
|- file2.pdf 
\Folder 2 
|- file1.pdf 
|- file2.pdf 
\Folder 3 
|- file1.pdf 
|- file2.pdf 

など

これを取得するには、次の

C:\test\2704814\Folder 3\2704814-file1.pdf 

C:\test\2704814\Folder 3\2704814-file2.pdf 

など別の$ ExcludeL1第1レベルのためのsu挿入

答えて

2

EDIT bfolders

最も安全な方法は、ステップバイステップでそれを行うことです。

  • はVAR
  • に名前を格納し、テストのサブフォルダを反復処理するには、-notin(サブサブフォルダを反復処理し、不要な除外します除外文字をリテラルにする必要があります)
  • そこにpdfを繰り返し、格納先フォルダ名の接頭辞が付けられていないことを確認します。
  • 最終的に名前を変更します。

$Base = 'C:\test\' 
$ExcludeL1 = @('folder 1', 'Folder 2') 
$ExcludeL2 = @('Othername') 

Get-ChildITem -Path $Base -Directory | Where {$_.Name -notin $ExcludeL1}|ForEach { 
    $PreFix = $_.Name 
    Get-ChildItem -Path $_.FullName -Directory | 
    Where-Object {$_.Name -notin $ExcludeL2 } | 
     ForEach-Object { 
     Get-ChildItem $_.FullName -Filter *.PDF | 
      Where-Object {$_.BaseName -notmatch $PreFix}| 
      Rename-Item -NewName { "$PreFix-$($_.Name)"} -WhatIf 
     } 
} 

あなたの出力がOKに見える場合は、最後の行に-WhatIfを削除します。私のRAMドライブAの

サンプルresutlt:

> tree /F 
A:. 
└───test 
    ├───2704814 
    │ ├───Folder 1 
    │ │  file1.pdf 
    │ │  file2.pdf 
    │ ├───Folder 2 
    │ │  file1.pdf 
    │ │  file2.pdf 
    │ └───Folder 3 
    │   2704814-file1.pdf 
    │   2704814-file2.pdf 
    └───2704815 
     ├───Folder 1 
     │  file1.pdf 
     │  file2.pdf 
     ├───Folder 2 
     │  file1.pdf 
     │  file2.pdf 
     └───Folder 3 
       2704815-file1.pdf 
       2704815-file2.pdf 
+0

こんにちはLotPings、明確な説明と作業溶液をありがとうございました。魅力的な作品!また、既に番号があるかどうかの確認は非常に歓迎です。 – Ignotus

+0

別の変数 '$ ExcludeL1'を作成して(' $ EcludeL2'に名前を変更して) 'Where-Object {$ _。Name -notin $ ExcludeL1}最初のGet-ChildItemとForEach-Objectの間に「|」を付けます。 – LotPings

+0

申し訳ありませんが、他の質問を削除し、あなたがとても速くないことを望みました;)not notをinに変更し、「Folder 3」のみを含めました。もう少しテストし、それ以外の場合はアップデートを試します。ありがとう。 – Ignotus

関連する問題