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

时间:2018-06-20 11:10:58

标签: powershell csv robocopy

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

我可以识别用户,并将他们输出到.csv文件中,例如内容类似于以下内容:

E:\Shares\Users$\AbassR
E:\Shares\Users$\AbbottJ
... and so on

我想使用PowerShell和robocopy来避免长文件名限制和Windows操作系统具有的其他任何限制。

我确实找到了已修改的脚本:

GC -Path G:\Shares\ArchiveUsers$\userstomove.csv | ForEach-Object {
  robocopy $_ G:\Shares\ArchiveUsers$\Watford /E /Z /R:1 /W:1 /LOG+:G:\userscopied.txt /NP
}

它会复制(不移动),但也不会在目标位置重新创建原始文件夹。似乎只能从.csv文件中显示的文件夹复制文件,然后复制到目标存档文件夹的根目录。

如果可以将/mov文件中标识的源文件夹移动到目标存档中具有相同名称的文件夹,这将使我的生活变得更加轻松(也许使用robocopy .csv开关)位置)以及我们之前手动迁移过的所有其他文件夹。

2 个答案:

答案 0 :(得分:2)

使用参数/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
}

答案 1 :(得分:0)

最后,这是我最终完成工作的脚本。但是,后来确实出现了移动用户目录(例如我不是所有者)之类的用户目录的子文件夹的问题。

import * as cors from 'cors';
const corsHandler = cors({origin: true});

export const exampleFunction= functions.https.onRequest(async (request, response) => {
       corsHandler(request, response, () => {});
       //Your code here
});

感谢所有输入。