0

真的需要帮助创建一个备份的脚本,并沿着没有复制的文件射出错误

这是我尝试过的:

创建要传递给的文件路径列表,copy-item以期稍后捕获每个文件的错误,然后记录它们:

通过使用,$list2X我可以循环浏览每个文件,但copy-item会丢失目录结构并将其全部发送到单个文件夹中。所以现在我正在使用$list2,稍后我会copy-item -recurse复制文件夹:

#create list to copy
$list = Get-ChildItem -path $source | Select-Object Fullname
$list2 = $list -replace ("}"),("")
$list2 = $list2 -replace ("@{Fullname=") , ("")

out-file -FilePath g:\backuplog\DirList.txt -InputObject $list2

#create list crosscheck later
$listX = Get-ChildItem -path $source -recurse | Select-Object Fullname
$list2X = $listX -replace ("}"),("")
$list2X = $list2X -replace ("@{Fullname=") , ("")

out-file -FilePath g:\backuplog\FileDirList.txt -InputObject $list2X           

在这里,我将通过列表:

$error.clear()
Foreach($item in $list2){
 Copy-Item -Path $item -Destination $destination -recurse -force -erroraction Continue 
  }
 out-file -FilePath g:\backuplog\errorsBackup.txt -InputObject $error

非常感谢任何帮助!

4

3 回答 3

1

复杂文件复制或备份脚本的答案几乎总是:“使用 robocopy”。

账单

于 2013-03-20T20:08:56.267 回答
0

好吧,考虑到我的响应时间,我花了很长时间。这是我的复制功能,它记录了大多数错误(网络中断、复制失败等)、复制功能和目标对象。

Function backUP{ Param ([string]$destination1 ,$list1)
$destination2 = $destination1
                          #extract new made string for backuplog
                        $index = $destination2.LastIndexOf("\") 
                        $count = $destination2.length - $index
                        $source1 = $destination2.Substring($index, $count)
                        $finalstr2 = $logdrive + $source1

Foreach($item in $list1){

 Copy-Item -Container: $true -Recurse -Force -Path $item -Destination     $destination1     -erroraction Continue 
 if(-not $?)
 {
  write-output "ERROR de copiado : " $error| format-list | out-file  -Append             "$finalstr2\GCI-ERRORS-backup.txt"
      Foreach($erritem in $error){
      write-output "Error Data:" $erritem.TargetObject  | out-file -Append   "$finalstr2\GCI-    ERRORS-backup.txt"
          }
  $error.Clear()
     }
   }
 }
于 2013-04-10T14:29:53.830 回答
0

想要将 C:\Scripts 中的所有项目(包括子文件夹)复制到 C:\Test?然后只需使用通配符...

接下来让自己更轻松,并执行以下操作:

$files = (Get-ChildItem $path).FullName #Requires PS 3.0
#or
$files = Get-ChildItem $path | % {$_.Fullname}
$files | Out-File $outpath
于 2013-03-21T06:01:51.993 回答