Powershell - 复制特定大小以下的文件,同时保留目录结构

Powershell - 复制特定大小以下的文件,同时保留目录结构

我需要创建一个脚本,将文件从多个用户的 PC 复制到共享的服务器文件夹。对于可复制的文件类型以及文件大小都会有所限制。

我目前正在运行这个;

$date = (Get-Date).ToString("yyyy-MM-dd")

$DestPath =  "Z:\data\username\\$date"

mkdir $DestPath

$SourcePath = "C:\users\username\Documents\Foldername"

Copy-Item -Path $SourcePath  -Exclude *.exe, *.zip -destination $DestPath -Recurse

它根据今天的日期创建文件夹,复制除 .exe 和 .zip 文件之外的所有文件,但在某些情况下这些文件是必需的 - 而且由于它们相当小,所以允许复制。(这意味着它们需要手动复制)我需要做的是添加或更改上述脚本,以允许复制所有小于一定大小的文件(在本例中为 100MB 以下),同时保持父文件夹的目录结构。有些用户会深入 10 个左右的文件夹。

多个用户使用该脚本,因此每个用户的硬编码目录名称在 $SourcePath 中完成

有任何想法吗?

答案1

此 PowerShell 代码应该可以执行此操作(未经测试):

Get-ChildItem $SourcePath | where-object {$_.length -lt 2000000} | Copy-Item -Destination $DestPath

答案2

以下脚本现在正在运行:

  • 递归,至少深入 4 层(已测试)
  • 按要求排除文件
  • 如果 Exclude 与 Get-childItem 一起使用,则它只对父目录起作用,而不对任何子目录起作用

$DestPath =  "Z:\data\username\\$date"

mkdir $DestPath

$SourcePath = "C:\users\username\Documents\Foldername"

Get-ChildItem $SourcePath | where-object {$_.length -lt 200000000} | Copy-Item -Recurse -Exclude *.exe, *.zip, *.iso, *.rar, *.bak -Destination $DestPath

相关内容