shell 从csv文件中移动文件夹列表而不丢失权限

c9x0cxw0  于 2023-02-24  发布在  Shell
关注(0)|答案(1)|浏览(127)

我试图移动用户文件夹列表到一个新的文件服务器,所以我需要保持权限不变。为此,我使用robocopy。问题是,它只会移动源文件夹内的文件和子文件夹,而不是源文件夹本身。这是我使用的脚本:

function Move-Folders {
   param(
       [Parameter(Mandatory=$true)]
       [string]$Csv
   )

   $folders = Import-Csv -Path $Csv
   $Target = "\\Server\share\"

   foreach ($folder in $folders) {
       $folderPath = $folder.Path
       Write-Host "moving folder $folderPath"

       try {
           robocopy $folderPath $Target /E /COPYALL /MOVE /NP
       } catch {
           $errorMessage = $_.Exception.Message
           Write-Host -ForegroundColor Yellow "Error Moving folder $folderPath : $errorMessage"
       }
   }
}

如果发生错误,它也不会显示我在捕获中写入的错误消息。有人能帮忙吗?我如何获得移动CSV文件中写入的源文件夹的命令?这是我第一次使用Robocopy,因此如果你们对命令有任何修改,请随时添加它。CSV路径列的写入方式为\Server\folder

yhqotfr8

yhqotfr81#

您可以尝试使用以下命令获取directoryname本身:

$dir = $folderPath -replace ".*\\"

然后将目录名称添加到robocopy命令:

robocopy "$folderPath\" "$Target\$dir" /E /COPYALL /MOVE /NP

完整的脚本将如下所示:

function Move-Folders {
   param(
       [Parameter(Mandatory=$true)]
       [string]$Csv
   )

   $folders = Import-Csv -Path $Csv
   $Target = "\\Server\share"

   foreach ($folder in $folders) {
       $folderPath = $folder.Path
       Write-Host "moving folder $folderPath"

       $dir = $folderPath -replace ".*\\"

       try {
           robocopy "$folderPath\" "$Target\$dir" /E /COPYALL /MOVE /NP
       } catch {
           $errorMessage = $_.Exception.Message
           Write-Host -ForegroundColor Yellow "Error Moving folder $folderPath : $errorMessage"
       }
   }
}

也许它会更好地编辑CSV文件与更多的信息,并获得所需的文件夹直接从CSV。

相关问题