Mover uma pasta pela rede

1

Eu preciso mover (não copiar e excluir, por uma questão de verificação de arquivos) uma pasta de uma pasta de rede para outra pasta de rede usando o Powershell.

Eu tentei Move-Item (onde test1 é uma pasta):

PS C:\Users\user\Documents> Move-Item test1 \SomeServer\c$\some_folder\
Move-Item : Source and destination path must have identical roots. Move will not work across volumes.
At line:1 char:10
+ Move-Item <<<<  test1 \SomeServer\c$\some_folder\
    + CategoryInfo          : WriteError: (C:\Users\user\Documents\test1:DirectoryInfo) [Move-Item], IOExce
   ption
    + FullyQualifiedErrorId : MoveDirectoryItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand

Estou sentindo falta de algo simples aqui? Uma maneira simples de fazer isso?

Eu tentei robocopy :

robocopy /MOVE test1 \SomeServer\c$\some_folder\

Que funcionou parcialmente, mas perdeu a pasta test1 (o que significa que test não apareceu em some_folder ) e apenas os arquivos dessa pasta acabaram em \SomeServer\c$\some_folder\

É assim que os resultados devem ser:

Diretório de trabalho (antes da mudança):

  • test1 (pasta com arquivos nela)
  • test2 (pasta com arquivos nela)
  • test3 (pasta com arquivos nela)
  • arquivo.txt

Diretiva de trabalho (após a mudança):

  • test2 (pasta com arquivos nela)
  • test3 (pasta com arquivos nela)
  • arquivo.txt

\\ SomeServer \ c $ \ alguma_pasta \ (esperado após a movimentação):

  • test1 (pasta com arquivos nela)

O problema é que, quando eu uso o robocopy, o resultado é files in it mostrado no resultado, mas não a pasta test1 ...

Eu tentei robocopy com um / s e / move, ainda sem sorte.

Eu encontrei algo como:

set folder="test1"

robocopy /MOVE "%folder%" "\SomeServer\c$\some_folder\%folder%" 

Quase funciona, mas os metadados da pasta (data de modificação / criação) são perdidos e precisam permanecer.

    
por Zeno 26.03.2015 / 19:01

4 respostas

1

Veja como você pode usar o Robocopy para mover uma pasta inteira ( test1 ) para outra pasta ( some_folder ) em um servidor diferente, mantendo os carimbos de data, etc. >

ROBOCOPY "test1" "\SomeServer\c$\some_folder\test1" /MOVE /COPY:DAT /DCOPY:T

A partir das informações de uso de ROBOCOPY /? :

/COPY:copyflag[s] :: what to COPY for files (default is /COPY:DAT).
                      (copyflags : D=Data, A=Attributes, T=Timestamps).
                      (S=Security=NTFS ACLs, O=Owner info, U=aUditing info).

/DCOPY:T :: COPY Directory Timestamps.
    
por 10.04.2015 / 20:13
1

Tente usar o PowerShell 3 - acho que algumas limitações foram removidas do Move-Item.

O seguinte script do PowerShell fará Copy-Item seguido por compare-object e Remove-Item somente se igual:

$source = "<UNC Path>"
$destination = "<UNC Path>"

if (test-path $destination -PathType Container) 
{
  foreach ( $srcObj in (get-childitem $source )) 
  { 
    $srcObjPath = "$($srcObj.fullname)"
    $destObjPath = "$($destination)\$($srcObj.name)" 
    If((Test-Path -LiteralPath $destination)) 
     {
       copy-item $srcObjPath $destination -recurse
       if ( (Test-Path -Path $destObjPath ) -eq $true)
       {
        if ( (compare-object (gci $srcObjPath -recurse) (gci $destObjPath -recurse)) -eq $null)
        {
         write-output "Compare is good. Remove $($srcObjPath)"
         remove-item $srcObjPath -recurse
        }
        else
        {
          write-output "Compare is bad. Remove $($destObjPath)"
          remove-item $destObjPath -recurse
         }
       }
       else 
       { 
        write-output "$($destination) path is bad" 
       }
     }
  else
  {
    write-output "bad destinaton: $($destination)"
  }
 }
}

(fonte)

    
por 09.04.2015 / 15:17
0

Sou meio novo aqui, mas ... Copiar coisas com o Robocopy usa uma sintaxe como essa:

robocopy \source_host\source_dir \dest_host\dest_dir * 

onde, * (significando todos) ou lista de arquivos a serem copiados.

Pessoalmente, não consegui copiar um diretório usando robocopy dessa 'maneira direta' (source / dest). Apenas usando o parâmetro /MIR .

    
por 26.03.2015 / 20:00
0

O que eu faria é mapear o local de rede para fazer um 'Drive' no mesmo script e, em seguida, desconectá-lo no final. Eu também simplesmente usaria o comando MOVE

por exemplo.

NET USE S: \networkLocation\c$\newDir
MOVE "C:\user\desktop\working dir\test1" S:
NET USE S: /DELETE
    
por 08.04.2015 / 12:49