2016-05-24 2 views
2

Я пытаюсь создать каталоги в каком-либо целевом местоположении, если они не существуют.Попытка создания каталогов с помощью Powershell

Название каталога из другого источника.

для каждого имени каталога в C:\some\location
создать новый каталог с тем же именем в C:\another\location.

, например.

c:\some\location\ 
       \apples 
       \oranges 

to 
c:\another\location\ 
        \apples 
        \oranges 

так что по сути я буду воссоздавать все папки из source -> to -> target. Не рекурсивный, кстати. просто верхний уровень.

Так что я получил это до сих пор с PS:

dir -Directory | New-Item -ItemType Directory -Path (Join-Path "C:\jussy-test\" Select-Object Name)

или

dir -Directory | New-Item -ItemType Directory -Path "C:\new-target-location\" + Select-Object Name

и я застрял. Я пытаюсь получить последний бит. но в любом случае, может быть, у кого-то есть хорошая идея в их голове?

+0

однострочный: 'dir -Path C: \ some \ location \ * -Directory | % {New-Item -ItemType Directory -Path C: \ another \ location \ -Name $ _. Name} ' – xXhRQ8sD2L7Z

ответ

2

Вы очень близко к первой попытке. Главное, что вам не хватает, - это то, как перебирать вывод Get-Childitem (aka dir). Для этого вам нужно трубы Foreach-Object

$srcDir = 'c:\some\location' 
$destDir = 'c:\another\location' 

dir $srcDir -Directory | foreach { 
    mkdir (join-path $destDir $_.name) -WhatIf 
} 

Внутри foreach, переменная $_ имеет текущий объект, и $_.Name выбирает свойство Name. (Это также использует mkdir в качестве замены для New-Item -Directory, но они в основном взаимозаменяемы).

Как только вы знаете, что делает этот код, удалите -WhatIf, чтобы он действительно создал каталоги.

Смежные вопросы