Скопируйте структуру каталогов с помощью PowerShell - PullRequest
2 голосов
/ 19 марта 2012

Есть ли способ сделать следующее в PowerShell?

xcopy \\m1\C$\Online\*.config \\m2\C$\Config-Backup /s

Я пробовал это:

Copy-Item \\m1\C$\Online\* -Recurse -Destination \\m2\C$\Config-Backup -include *.config

Но это ничего не делает, вероятно, потому что вкорень.Как мне это сделать?

Ответы [ 4 ]

2 голосов
/ 19 марта 2012

Если вы хотите использовать встроенный PowerShell (со сторонним модулем .NET: P), а также не хотите, чтобы длинные пути к файлам (> 255 символов) останавливали копирование, вы можете использовать это:

# Import AlphaFS .NET module - http://alphafs.codeplex.com/
Import-Module C:\Path\To\AlphaFS\DLL\AlphaFS.dll

# Variables
$SourcePath = "C:\Temp"
$DestPath = "C:\Test"

# RecursePath function.
Function RecursePath([string]$SourcePath, [string]$DestPath){

    # for each subdirectory in the current directory..       
    [Alphaleonis.Win32.Filesystem.Directory]::GetDirectories($SourcePath) | % {

        $ShortDirectory = $_
        $LongDirectory = [Alphaleonis.Win32.Filesystem.Path]::GetLongPath($ShortDirectory)

        # Create the directory on the destination path.
        [Alphaleonis.Win32.Filesystem.Directory]::CreateDirectory($LongDirectory.Replace($SourcePath, $DestPath))

        # For each file in the current directory..                                              
        [Alphaleonis.Win32.Filesystem.Directory]::GetFiles($ShortDirectory) | % {

            $ShortFile = $_
            $LongFile = [Alphaleonis.Win32.Filesystem.Path]::GetLongPath($ShortFile)

            # Copy the file to the destination path.                                                                       
            [Alphaleonis.Win32.Filesystem.File]::Copy($LongFile, $LongFile.Replace($SourcePath, $DestPath), $true)                             

        }

    # Loop.
    RecursePath $ShortDirectory $DestPath
    }
}

# Execute!
RecursePath $SourcePath $DestPath

Обратите внимание, этот код был удален из гораздо более крупного проекта, но я быстро его проверил, и, похоже, он работает.Надеюсь, это поможет!

2 голосов
/ 19 марта 2012
Start-Process xcopy "\\m1\C$\Online\*.config \\m2\C$\Config-Backup /s" -NoNewWindow

: P

0 голосов
/ 29 мая 2015

Загляните в робокопию. Это не встроенная команда PowerShell, но я все время вызываю ее из сценариев PowerShell. Работает аналогично xcopy, только более мощный.

0 голосов
/ 19 января 2015

Новый AlphaFS 2.0 делает это действительно просто.

Пример: рекурсивное копирование каталога

# Set copy options.
PS C:\> $copyOptions = [Alphaleonis.Win32.Filesystem.CopyOptions]::FailIfExists

# Set source and destination directories.
PS C:\> $source = 'C:\sourceDir'
PS C:\> $destination = 'C:\destinationDir'

# Copy directory recursively.
PS C:\> [Alphaleonis.Win32.Filesystem.Directory]::Copy($source, $destination, $copyOptions)

AlphaFS на GitHub

...