簡體   English   中英

重命名文件以包含Parent&Grantparent文件夾-Powershell

[英]Rename Files to include Parent & Grantparent folder - powershell

我有遵循以下格式的文件夾:

C:\root folder\grandparent folder\parent folder\00001.pdf
C:\root folder\grandparent folder\parent folder\00002.pdf

我想將pdf重命名為root folder-grandparent folder-parent folder.1.pdf和root folder-grandparent folder-parent folder.2.pdf等,並在可能的情況下將此文件移至根文件夾級別。

我發現此powershell腳本執行類似的操作,但只使用父文件夾名稱。

這就是我所擁有的:

#######Rename script#############

$path = Split-Path -parent $MyInvocation.MyCommand.Definition 

Function renameFiles 
{ 
  # Loop through all directories 
  $dirs = dir $path -Recurse | Where { $_.psIsContainer -eq $true } 
  Foreach ($dir In $dirs) 
  { 
    # Set default value for addition to file name 
    $i = 1 
    $newdir = $dir.name + "_" 
    # Search for the files set in the filter (*.pdf in this case) 
$files = Get-ChildItem -Path $dir.fullname -Filter *.pdf -Recurse 
Foreach ($file In $files) 
{ 
  # Check if a file exists 
  If ($file) 
  { 
    # Split the name and rename it to the parent folder 
    $split    = $file.name.split(".pdf") 
    $replace  = $split[0] -Replace $split[0],($newdir + $i + ".pdf") 

    # Trim spaces and rename the file 
    $image_string = $file.fullname.ToString().Trim() 
    "$split[0] renamed to $replace" 
    Rename-Item "$image_string" "$replace" 
    $i++ 
      } 
    } 
  } 
} 
# RUN SCRIPT 
renameFiles

從下面的@Joye的代碼了解到。 我測試了Joye的代碼,它只是給了我“不支持指定格式”錯誤。 不知道這是否是我的實驗室(Powershell V3)。 然后我對其做了一些修改,使其在我的實驗室中可以正常工作:

 get-childitem C:\root folder\grandparent folder\parent folder\*.pdf |
    % {

    $ParentOjbect =$_.Directory
    $Parent =$ParentOjbect.Name
    $GrandParent = $ParentOjbect.Parent

    Move-item $_ -Destination (Join-Path C:\root folder ('{0}{1}{2}' -f $GrandParent,$Parent,$_.Name))
    }

如果它們都遵循相同的模式,並且祖父母或根目錄中沒有文件,那么這很簡單:

$root = 'C:\root folder'

Get-ChildItem -Recurse |
  ForEach-Object {
    $parent = $_.Parent
    $grandparent = $parent.Parent
    $number = [int]$_.BaseName

    Move-Item $_ -Destination (Join-Path $root ('{0}-{1}-{2}{3}' -f $grandparent, $parent, $number, $_.Extension))
  }

要獲得曾祖父母,只需添加:

Get-childitem "Y:\DIR\*" -include *.log -recurse |
% {

$nextName = Join-Path -Path 'Y:\DIR\*' -ChildPath $_.name

while(Test-Path -Path $nextName)
{
   $nextName = Join-Path Y:\DIR ($_.BaseName + "_$num" + $_.Extension)    
   $num+=1   
}

$ParentOjbect =$_.Directory
$Parent =$ParentOjbect.Name
$GrandParent = $ParentOjbect.Parent
$GreatGran = $GrandParent.Parent

Copy-item $_ -Destination (Join-Path "Y:\DIR" ('{0}_{1}_{2}_{3}' -f $GreatGran,$GrandParent,$Parent,$_.Name))
}

這真的幫助了我。 也要感謝喬伊斯最初創建的彼得斯修改過的腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM