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

时间:2016-07-05 08:52:50

标签: powershell network-drive

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

我要在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
...

1 个答案:

答案 0 :(得分:1)

我不明白为什么只有一个文件夹被移动但您可以尝试使用以下脚本,因为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调用以进一步提高性能。