[英]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.