网络驱动器-移动数量的文件夹递归到另一个文件夹在同一文件夹与PowerShell



我有一个根文件夹(映射的网络驱动器)到Z,在这个文件夹中我有一个名为Archive的文件夹,我想把Z中的一些文件夹移动到Archive文件夹。

csv文件中要移动的文件夹的标题。

我创建了一个PowerShell脚本,但不知怎么的,它并没有真正工作,它确实移动了一个文件夹,但是即使在PowerShell命令中也什么也没有发生,只是空的,过了一会儿什么也没有发生,我不得不关闭PowerShell窗口。

如果我有十个文件夹要复制只有第一个文件夹会被移动,就这样。

代码如下:

$currentPath = Split-Path -Parent $PSCommandPath;
$areaCsvPath = $currentPath + "CSVFile.csv";
write-host $areaCsvPath;
$csv = Import-Csv $areaCsvPath;
$count =0;
$Creds = Get-Credential
foreach ($row in $csv)
{
    Get-ChildItem -Path "Z:" -Recurse |
      Where-Object {$_.name -eq $row.Title} |
      Move-Item -destination "Z:_Archive" -Credential $Creds
    $count++;
    write-host $count;
}

CSV格式如下

Title
12345
22223
75687
...

我不明白为什么只有一个文件夹被移动,但你可以尝试下面的脚本应该更快,因为Get-ChildItem cmdlet只被调用一次:

$currentPath = Split-Path -Parent $PSCommandPath;
$areaCsvPath = $currentPath + "CSVFile.csv";
write-host $areaCsvPath;
$csv = Import-Csv $areaCsvPath;
$Creds = Get-Credential
Get-ChildItem -Path "Z:" -Recurse |
      Where-Object Name -in ($csv | select -expand Title) |
      Move-Item -destination "Z:_Archive" -Credential $Creds

如果文件夹位于Z:的顶层,则应省略-Recurse参数。另外,如果您只想移动文件夹,可以将-Directory开关添加到Get-ChildItem调用中,以进一步提高性能。

相关内容

最新更新