复制文件及文件所在的父文件夹

复制文件及文件所在的父文件夹

复制文件但不是所有文件夹,只复制包含文件的一个父/相对文件夹。

文件夹和文件结构:

  1. Excel 数据(文件夹)

    a.文件1.xlsx

    b.文件2.xlsx

    c.文件3.xlsx

    d.文件14.xlsx

    e.文件15.xlsx

我正在使用的代码:

$sourcePath = '\\171.168.10.98\One_Data'
$destinationPath = 'C:\Temp'
$files = Get-ChildItem -Path $sourcePath -Recurse
$filecount = $files.count
$i=0
Foreach ($file in $files) {
    $i++
    Write-Progress -activity "copying files..." -status "($i of $filecount) $file" -percentcomplete (($i/$filecount)*100)
  
    # Determine the absolute path of this object's parent container.  This is stored as a different attribute on file and folder objects so we use an if block to cater for both
    if ($file.psiscontainer) {$sourcefilecontainer = $file.parent} else {$sourcefilecontainer = $file.directory}

    # Calculate the path of the parent folder relative to the source folder
    $relativepath = $sourcefilecontainer.fullname.SubString($sourcepath.length)

    # Copy the object to the appropriate folder within the destination folder
    copy-Item $file.fullname ($destinationPath + $relativepath)
}

答案1

创建一个$includes数组,将文件用逗号分隔并用双引号括起来。使用命令-Include的参数Get-ChildItem并将$includes数组用作其使用的值。使用.Split("\")[-2]仅获取文件所在的文件夹,并将其与命令一起使用以new-item在目标位置创建该文件夹(如果该文件夹尚不存在)。最后,使用相同的.Split("\")[-2]命令copy-item将文件复制到目标位置的该目录中。

电源外壳

$includes = "File1.xlsx","File14.xlsx";
$sourcePath = '\\171.168.10.98\One_Data';
$destinationPath = 'C:\Temp';
$files = Get-ChildItem -Path $sourcePath -Recurse -Include $includes; 
$filecount = $files.count;
$i=0;

Foreach ($file in $files) {
    $i++;
    Write-Progress -activity "copying files..." -status "($i of $filecount) $file" -percentcomplete (($i/$filecount)*100);
    If (!(Test-Path "$($destinationPath)\$(($file.FullName).Split("\")[-2])")){New-Item "$($destinationPath)\$(($file.FullName).Split("\")[-2])" -Type Directory -Force;};
    Copy-Item $file.FullName -Destination "$($destinationPath)\$(($file.FullName).Split("\")[-2])" -Force;
    };

支持资源

相关内容