Переместите количество папок рекурсивно в другую папку в той же папке с помощью PowerShell

У меня есть корневая папка (подключенный сетевой диск) к Z, в этой папке у меня есть папка с именем Архив, и я хотел бы переместить некоторые папки в 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
...

person Alnedru    schedule 05.07.2016    source источник
comment
Вы можете предоставить CSVFile.csv   -  person Martin Brandl    schedule 05.07.2016
comment
Добавил в пост, но ничего особенного...   -  person Alnedru    schedule 05.07.2016


Ответы (1)


Я не понимаю, почему перемещается только одна папка, но вы можете попробовать следующий сценарий, который должен быть намного быстрее, потому что командлет Get-ChildItem вызывается только один раз:

$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 для дальнейшего повышения производительности.

person Martin Brandl    schedule 05.07.2016
comment
Да, мне нужно только переместить папки, но в папках есть содержимое, другие подпапки и элементы. Должен ли я удалить -recurse и добавить -directory? - person Alnedru; 05.07.2016
comment
Да, попробуйте. - person Martin Brandl; 05.07.2016
comment
Кстати, странно, я получаю сообщение об ошибке: Move-Item: неверный синтаксис имени файла, имени каталога или метки тома. Move-Item -destination Z:_Archive; - person Alnedru; 05.07.2016
comment
Похоже, вам не хватает обратной косой черты. - person Martin Brandl; 05.07.2016
comment
Хорошо, теперь он выполняется, он копирует папки, НО все еще окно powershell останавливается, не появляется новая строка для новой команды, а последняя команда «write-host Finished» не отображается, не могли бы вы знать, почему это произошло? Может быть там много папок и это подключенный сетевой диск? - person Alnedru; 05.07.2016
comment
Хм, может все-таки копирует? - person Martin Brandl; 05.07.2016
comment
Спасибо, вы были правы, удалив -Recurce и добавив -Directory, проблема решена! - person Alnedru; 05.07.2016