2015-08-06 2 views
1

это мой код:Как скопировать элемент с структурой папок?

$ путь - это массив, который содержит полный путь к файлу, который я хочу скопировать.

$path 

Y:\13000\00000001.TIF 
Y:\14000\00000002.TIF 
Y:\15000\00000004.TIF 

for ($i = 0; $i -lt $path.count; $i++) 
{ 
Copy-Item -Recurse -Path $path[$i] -Destination "D:\myfiles" 
} 

Он работает, но копировать меня файлы непосредственно в корневом каталоге D:\myfiles папки, я хочу, чтобы скопировать мои файлы в них соответствующую папку .. кто уже существует.

это то, что я получаю:

D:\myfiles\00000001.TIF 
D:\myfiles\00000002.TIF 
D:\myfiles\00000003.TIF 

И это хочу я хочу:

D:\myfiles\13000\00000001.TIF 
D:\myfiles\14000\00000002.TIF 
D:\myfiles\15000\00000003.TIF 

Как добиться этого?

Благодаря

ответ

1

Если родительская папка уже существует, как вы упомянули, то вы можете сделать это:

$paths = 'Y:\13000\00000001.TIF', 'Y:\14000\00000002.TIF', 'Y:\15000\00000004.TIF' 

foreach ($item in Get-Item $paths) 
{ 
    Copy-Item -Path $item.FullName -Destination "D:\myfiles\$($item.Directory.Name)" 
} 

Обратите внимание на использовании переменного расширения, $($item.Directory.Name) в -Destination строки, чтобы определить родительскую папку ,

1

Это, как я хотел бы сделать это, объяснение в комментариях, надеюсь, это понятно :)

Этот подход должен быть в состоянии обрабатывать сетевые пути, если вам нужно, что функциональность.

$path = 
@(
    'Y:\13000\00000001.TIF' 
    'Y:\14000\00000002.TIF' 
    'Y:\15000\00000004.TIF' 
) 

for ($i = 0; $i -lt $path.count; $i++) 
{ 
    # Change this for additional directories 
    $sourceFolder = 'D:\myfiles' 

    # Get the old path and split on a semi colon 
    # Where-Object to filter out empty strings/null entries 
    $sourceFile = $path[$i] -Split "\\" | Where-Object -FilterScript {$_} 

    # Join the path we split to our destination 
    # 1 is the 2nd item in the index (0 is the first) 
    # $source.count - 2 will get the second last item in the index 
    # (-2 because we're taking off the first and last) 
    # 
    # [0]   [1]    [2] 
    # Y: \ 15000  \  00000004.TIF 
    # 
    # Once done, join all the parts back together with -Join '\' 
    $destination = Join-Path -Path $sourceFolder -ChildPath ($sourceFile[1..($sourceFile.count - 2)] -Join "\") 

    # Copy files to the destination we calculated 
    # Don't need -Recurse if we're giving full paths but up to you 
    Copy-Item -Recurse -Path $path[$i] -Destination $destination 
} 
Смежные вопросы