PowerShell - 将一些子文件夹批量移动到新服务器

时间:2014-07-16 22:29:54

标签: powershell batch-processing subdirectory

我被要求将200个文件夹移动到新服务器,但我不确定如何编写脚本,或者是否可以。

我在目的地有一个重复的文件夹结构,但问题是我必须在每个父文件夹中只移动1个子文件夹及其内容。看起来像这样:

FolderA
Folder1
Folder2

FolderB
Folder1
Folder2

是否可以仅移动' Folder1'从文件夹a-z和地方文件夹1'在相应的新父文件夹中?

3 个答案:

答案 0 :(得分:0)

我使用Robocopy,特别是如果您想保留所有权和权限。

答案 1 :(得分:0)

我很想使用RoboCopy进行复制,因为您可以将其设置为带来原始文件创建和修改的日期和时间以及安全权限。

虽然它本身不能做Folder1的事情。所以我会考虑使用PowerShell生成RoboCopy命令的批处理文件,然后运行它。例如看起来像这样的东西,虽然我还没有测试过。

$sourceFolder = "\\server1\share"
$destFolder   = "\\server2\share"


foreach ($folder in (Get-ChildItem  -Directory $sourceFolder)) {
    "robocopy `"$($sourceFolder)\$($folder)\Folder1`" `"$($destFolder)\$($folder)\Folder1`" /E /COPYALL /DCOPY:T" | Out-File roboscript.bat -Append
}

然后检查并运行roboscript.bat进行复制。

答案 2 :(得分:0)

更多关于TessellatingHeckler代码的评论,而不是答案。因为他先得到了答案,所以请告诉他你要归功于此。

由于您正在将字符串输出到文本文件,因此您可能希望使用字符串。关于你的ForEach,我想建议:

foreach ($folder in (Get-ChildItem -Directory $sourceFolder | Select -ExpandProperty FullName)) {
    $TargetFolder = $Folder -replace [regex]::Escape($sourceFolder), "$destFolder"
    "robocopy `"$Folder\Folder1`" `"$TargetFolder\Folder1`" /E /COPYALL /DCOPY:T" | Out-File roboscript.bat -Append
}

选择ForEach的一部分来讨论相关文件夹的完整路径。然后它声明一个变量作为目标,在该目标中,它将源路径替换为目标路径(源是转义的,因为这是一个RegEx匹配)。这可能会使其更加灵活。

此外,您不需要以这种方式制作子表达式,因为它只是您引用的字符串,而不是[FileInfo]对象。

最后,我想我会补充一点,你可以使用两个连续的双引号,而不是根据你的意愿转义它们,不过我会建议像TH建议那样转义它们。