【问题标题】:Move amount of folders recursive to another folder in the same folder with PowerShell使用 PowerShell 将大量文件夹递归移动到同一文件夹中的另一个文件夹
【发布时间】:2016-07-05 17:27:18
【问题描述】:

我有一个 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
...

【问题讨论】:

  • 能否提供CSVFile.csv
  • 已添加到帖子中,但没什么特别的......

标签: powershell network-drive


【解决方案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 调用以进一步提高性能。

【讨论】:

  • 是的,我只需要移动文件夹,但文件夹有内容、其他子文件夹和项目。我应该删除 -recurse 并添加 -directory 吗?
  • 是的,试一试。
  • 顺便说一句,我收到一个错误:Move-Item:文件名、目录名或卷标语法不正确。 Move-Item -destination "Z:_Archive";
  • 你好像少了一个反斜杠。
  • 好的,现在它执行了,它复制了文件夹,但是 powershell 窗口仍然停止,没有新的行出现给新的命令,最后一个命令 'write-host "Finished" 不是显示,你知道为什么会发生这种情况吗?会不会文件夹很多,这是一个映射的网络驱动器?
猜你喜欢
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多