使用PowerShell和CSV文件移动文件夹

使用PowerShell和CSV文件移动文件夹,powershell,csv,robocopy,Powershell,Csv,Robocopy,我们已经通过另一个PS脚本确定了一批不再活动的用户目录,希望将这些用户文件夹从现有位置移动到存档位置 我已经确定了用户身份,并将其输出到.csv文件,例如,内容类似于以下内容: E:\Shares\Users$\AbassR E:\Shares\Users$\AbbottJ ... and so on 它不复制(不移动),但也不在目标中重新创建原始文件夹。它似乎只从.csv文件中显示的文件夹复制文件,并复制到目标存档文件夹的根目录 如果它能移动的话,我的生活会轻松得多(也许有了robocopy/

我们已经通过另一个PS脚本确定了一批不再活动的用户目录,希望将这些用户文件夹从现有位置移动到存档位置

我已经确定了用户身份,并将其输出到
.csv
文件,例如,内容类似于以下内容:

E:\Shares\Users$\AbassR E:\Shares\Users$\AbbottJ ... and so on 它不复制(不移动),但也不在目标中重新创建原始文件夹。它似乎只从
.csv
文件中显示的文件夹复制文件,并复制到目标存档文件夹的根目录


如果它能移动的话,我的生活会轻松得多(也许有了robocopy
/mov
开关)在
.csv
文件中标识的源文件夹与我们以前手动迁移的所有其他文件夹一起被添加到目标存档位置中具有相同名称的文件夹中。

使用参数
/e
已使
robocopy
递归复制目录。但是,
robocopy
将源目录的内容复制到目标目录,而不是整个目录,从而有效地合并/覆盖来自不同用户的文件

要将源目录复制到各个目标目录,需要将这些目录指定为目标目录。要将源目录移动到目标目录,请将
/e
替换为
/move

$dst = 'G:\Shares\ArchiveUsers$\Watford'

... | ForEach-Object {
    $name = [IO.Path]::GetFileName($_)
    robocopy $_ "$dst\$name" /move /z /r:1 /w:1 /log+:G:\userscopied.txt /np
}

使用参数
/e
已使
robocopy
递归复制目录。但是,
robocopy
将源目录的内容复制到目标目录,而不是整个目录,从而有效地合并/覆盖来自不同用户的文件

要将源目录复制到各个目标目录,需要将这些目录指定为目标目录。要将源目录移动到目标目录,请将
/e
替换为
/move

$dst = 'G:\Shares\ArchiveUsers$\Watford'

... | ForEach-Object {
    $name = [IO.Path]::GetFileName($_)
    robocopy $_ "$dst\$name" /move /z /r:1 /w:1 /log+:G:\userscopied.txt /np
}

最后,这就是我的剧本,我完成了任务。然而,我确实在移动用户目录的子文件夹(如我的图片)时遇到了后续问题,我不是这些子文件夹的所有者

GC -Path G:\Shares\ArchiveUsers$\userstomove.csv | ForEach-Object {
    $dst = 'G:\Shares\ArchiveUsers$\Watford'
    $name = [IO.Path]::GetFileName($_)
    robocopy $_ "$dst\$name" /move /e /z /r:1 /w:1 /TEE /log+:G:\Shares\ArchiveUsers$\userscopied.txt /np
   }

感谢所有的输入。

最后,这是我最终完成的脚本,完成了任务。然而,我确实在移动用户目录的子文件夹(如我的图片)时遇到了后续问题,我不是这些子文件夹的所有者

GC -Path G:\Shares\ArchiveUsers$\userstomove.csv | ForEach-Object {
    $dst = 'G:\Shares\ArchiveUsers$\Watford'
    $name = [IO.Path]::GetFileName($_)
    robocopy $_ "$dst\$name" /move /e /z /r:1 /w:1 /TEE /log+:G:\Shares\ArchiveUsers$\userscopied.txt /np
   }

感谢您的所有意见。

不使用cmdlet是否有优势<代码>连接路径$dst(分割路径$\Leaf)我正在得到一个非常类似的答案。没有优势。这只是达到同一目的的另一种方式。谢谢你。我假设我需要修改建议的脚本,例如$dst='G:\Shares\ArchiveUsers$\Watford'GC-Path G:\Shares\ArchiveUsers$\userstomove.csv | ForEach对象{$name=[IO.Path]::GetFileName($\u)robocopy$\u“$dst\$name”/move/z/r:1/w:1/log+:G:\userscopied.txt/np}这确实有效,因为它现在复制了文件夹,但是源文件夹的内容没有被复制/移动。@Jason您的日志对此怎么说?不使用cmdlet有好处吗<代码>连接路径$dst(分割路径$\Leaf)我正在得到一个非常类似的答案。没有优势。这只是达到同一目的的另一种方式。谢谢你。我假设我需要修改建议的脚本,例如$dst='G:\Shares\ArchiveUsers$\Watford'GC-Path G:\Shares\ArchiveUsers$\userstomove.csv | ForEach对象{$name=[IO.Path]::GetFileName($\u)robocopy$\u“$dst\$name”/move/z/r:1/w:1/log+:G:\userscopied.txt/np}这确实有效,因为它现在复制了文件夹,但是没有复制/移动源文件夹的内容。@Jason您的日志对此有何说明?