复制文件但不是所有文件夹,只复制包含文件的一个父/相对文件夹。
文件夹和文件结构:
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;
};