使用PowerShell将文件夹数量递归移动到同一文件夹中的另一个文件夹

使用PowerShell将文件夹数量递归移动到同一文件夹中的另一个文件夹,powershell,network-drive,Powershell,Network Drive,我有一个根文件夹(映射的网络驱动器)到Z,在这个文件夹中我有一个名为Archive的文件夹,我想将Z中的一些文件夹移动到Archive文件夹 csv文件中要移动的文件夹的标题 我已经创建了一个PowerShell脚本,但不知怎么的,它并没有真正工作,它确实移动了一个文件夹,但即使在PowerShell命令中也不会发生任何事情,只是为空,过了一段时间什么都不会发生,我必须关闭PowerShell窗口 因此,如果我有十个文件夹要复制,只有第一个文件夹被移动,就是这样 代码如下: $currentPa

我有一个根文件夹(映射的网络驱动器)到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
调用,以进一步提高性能

你能提供添加到帖子中的
CSVFile.csv
,但没有什么特别的…是的,我只需要移动文件夹,但文件夹中有内容、其他子文件夹和项目。我应该删除-recurse并添加-directory吗?是的,尝试一下。顺便说一句,我得到一个错误:移动项:文件名、目录名或卷标语法不正确。移动项目-目标“Z:_存档”;您似乎缺少反斜杠。好的,现在它执行,它复制文件夹,但powershell窗口仍然停止,没有新命令的新行,并且没有显示最后一个命令“write host”Finished,您知道为什么会发生这种情况吗?是不是有很多文件夹,而这是一个映射的网络驱动器?