Powershell 使用 Get-ChildItem 获取完整文件路径

问题描述 投票:0回答:1

我是 powershell 新手,暂时用它来帮助我提取我在实验过程中收集的一些文件。

我有许多数据集,其中包含已处理数据的嵌套子文件夹。它们的路径中都有一个名为“VPP”的文件夹,我只想提取该文件夹中的文件并将它们复制到新位置。我想在保留现有目录结构的同时执行此操作,因此父文件夹将全部为空,但目录结构将被保留。我需要这样,以便我可以保留数据的组织(因为我从树顶部的父文件夹名称识别数据集),以便我可以稍后将文件复制回原始文件夹并拥有他们最终到达了正确的地方。

到目前为止,我改编了网上找到的一个脚本:

$sourceDirectory = "F:\OneDrive - University of Edinburgh\PhD\Results\Campaign1_Part4\GustData"
$destDirectory = "C:\Users\Anjali\Desktop\test"    
$keyword = "VPP"
$children = Get-ChildItem -Path $sourceDirectory -Recurse

foreach ($child in $children)
{
    if ($child -match $keyword)
    {
        try
        {                               
            Copy-Item -Path "$($sourceDirectory)\$($child )" -Destination $destDirectory -Force -Recurse
        }
        catch [System.Exception] 
        {
            Write-Output $_.Exception
        }
    }
}

我遇到的问题是 $child 变量只是文件名,没有任何中间子文件夹。我希望 $child 是从 $sourceDirectory 开始的文件路径,例如“dataset1 oldA oldB\VPP ile1”,但它出来的是“file1”。

如何检索中间文件路径?

powershell path backslash get-childitem
1个回答
0
投票

这会将 VPP 目录复制到新位置,同时保持目录结构。

当您确信将复制正确的目录时,请从

-WhatIf
命令中删除
Copy-Item
开关。

注意,此代码将在复制之前删除目标目录下的所有文件。这是为了保证不出现流浪。无关的文件散落在各处。您可能想改变这一点。

您需要更改指定源目录的第一行。

$sourceDirectory = 'C:\src\t\so\78211086\'
$destDirectory = Join-Path -Path $Env:USERPROFILE -ChildPath 'Desktop' -AdditionalChildPath 'test'
$keyword = 'VPP'

# Set the current directory to the source directory for Resolve-Path.
Push-Location $sourceDirectory

# Remove any existing data set directory and create it anew.
if (Test-Path -Path $destDirectory) { Remove-Item -Recurse -Force $destDirectory }
New-Item -ItemType Directory $destDirectory

Get-ChildItem -Recurse -Directory -Filter $keyword | ForEach-Object {
    $VppPath = Resolve-Path -Path $_.FullName -Relative
    $DestinationPath = Join-Path -Path $destDirectory -ChildPath $VppPath
    Copy-Item -Recurse -Path $VppPath -Destination $DestinationPath -WhatIf
}

# Return to whatever the directory was before this started.
Pop-Location

使用以下命令显示目标目录的内容。

Get-ChildItem -Recurse $destDirectory | Select-Object -Property FullName
© www.soinside.com 2019 - 2024. All rights reserved.