美好的一天,所有。这里的新成员和PowerShell相对较新,所以我很难搞清楚这个。我现在已经搜索了2天,但没有找到任何非常适合我需要的东西。
我需要使用映射驱动器将当前日期创建的文件夹复制到另一个位置。根据语言,这些文件夹位于5个其他文件夹下。
Folder1 \ Folder2 \ Folder3 \ Folder4 \ chs,enu,jpn,kor,tha
要复制的文件夹全部以相同的字母开头,后跟数字 - abc123456789_111。使用以下脚本,我不需要担心文件夹名称,因为只有我需要的文件夹才会有当前日期。
abc *文件夹所在的文件夹大约有35k个文件,每个文件夹超过1500个文件夹。
我已经使用Get-ChildItem完成了所有这些工作,但是它很慢,以至于开发人员可以在脚本完成时手动复制文件。这是我的剧本:
GCI -Path $SrcPath -Recurse |
Where {$_.LastWriteTime -ge (Get-Date).Date} |
Copy -Destination {
if ($_.PSIsContainer) {
Join-Path $DestPath $_.Parent.FullName.Substring($SrcPath.length)
} else {
Join-Path $DestPath $_.FullName.Substring($SrcPath.length)
}
} -Force -Recurse
(目前只复制到一个目标文件夹。)
我一直在研究使用cmd /c dir
和cmd /c forfiles
,但未能解决这个问题。 Dir将列出文件夹,但不按日期列出。 Forfiles也变得非常缓慢。
我不是开发人员,但我正在努力学习。非常感谢任何帮助/建议。
答案 0 :(得分:0)
@BaconBits是对的,你对你的副本项目和你的getchild项目都有一个递归。这将导致许多额外的无意义副本,由于您的force参数,这些副本只会被覆盖。更改脚本以执行foreach循环并从copy-item
中删除recurse参数GCI -Path $SrcPath -Recurse |
Where {$_.LastWriteTime -ge (Get-Date).Date} | % {
Copy -Destination {
if ($_.PSIsContainer) {
Join-Path $DestPath $_.Parent.FullName.Substring($SrcPath.length)
} else {
Join-Path $DestPath $_.FullName.Substring($SrcPath.length)
}
} -Force
}