1

Мне нужно переместить (не копировать, а затем удалить, для проверки файла) папку из сетевой папки в другую сетевую папку с помощью Powershell.

Я пробовал Move-Item (где test1 - это папка):

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

Я что-то упускаю здесь? Простой способ сделать это?

Я попробовал robocopy:

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

Это частично сработало, но оно потеряло папку test1 (то есть test не отображалось в some_folder), и только файлы в этой папке оказались в \\SomeServer\c$\some_folder\

Вот как должны выглядеть результаты:

Рабочий каталог (до переезда):

  • test1 (папка с файлами в ней)
  • test2 (папка с файлами в ней)
  • test3 (папка с файлами в ней)
  • file.txt

Рабочий каталог (после переезда):

  • test2 (папка с файлами в ней)
  • test3 (папка с файлами в ней)
  • file.txt

\\SomeServer\c $\some_folder\ (ожидается после перемещения):

  • test1 (папка с файлами в ней)

Проблема в том, что когда я использую robocopy, в результате files in it отображаются в результате, но нет папки test1 ...

Я попробовал robocopy с /s и /move, все еще не повезло.

Я нашел что-то вроде:

set folder="test1"

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

Почти работает, но метаданные папки (дата изменения / создания) теряются, и это должно остаться.

4 ответа4

1

Вот как вы можете использовать Robocopy для перемещения всей папки (test1) в другую папку (some_folder) на другом сервере с сохранением отметок даты и т. Д .:

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

Из 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.
1

Попробуйте использовать PowerShell 3 - я думаю, что некоторые ограничения были удалены из Move-Item.

Следующий скрипт PowerShell выполнит Copy-Item последующим compare-object и Remove-Item только если они равны:

$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)"
  }
 }
}

(источник)

0

Что я хотел бы сделать, это сопоставить сетевое местоположение, выполнить «Диск» в том же сценарии, а затем отключиться от него в конце. Я бы также просто использовал команду MOVE

например

NET USE S: \\networkLocation\c$\newDir
MOVE "C:\user\desktop\working dir\test1" S:
NET USE S: /DELETE
0

Я новичок здесь, но ... Для копирования вещей с помощью Robocopy используется следующий синтаксис:

robocopy \\source_host\source_dir \\dest_host\dest_dir * 

где * (имеется в виду все) или список файлов для копирования.

Лично я не смог скопировать каталог с помощью робокопии «прямым путем» (source / dest). Только с использованием параметра /MIR .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .