我需要创建一个脚本,将文件从多个用户的 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