Как создать соединения каталогов для нескольких подкаталогов с помощью PowerShell?

Есть много подпапок и нужно создать соединение каталогов только для подпапок 2-го порядка.

Некоторая часть текущей структуры папок показана ниже

C:\MainFolder>tree
Folder PATH listing for volume C System
C:.
├───1stSub-FolderA
│   ├───2ndSub-FolderA
│   └───2ndSub-FolderB
└───1stSub-FolderB
    ├───2ndSub-FolderA
    └───2ndSub-FolderB

D:\MainFolder-Copy>tree
Folder PATH listing for volume Dosya
D:.
├───1stSub-FolderA
└───1stSub-FolderB

Ручное кодирование для каждой папки:

C:\>mklink /j D:\MainFolder-Copy\1stSub-FolderA\2ndSub-FolderA C:\MainFolder\1stSub-FolderA\2ndSub-FolderA
Junction created for D:\MainFolder-Copy\1stSub-FolderA\2ndSub-FolderA <<===>> C:\MainFolder\1stSub-FolderA\2ndSub-FolderA

C:\>mklink /j D:\MainFolder-Copy\1stSub-FolderA\2ndSub-FolderB C:\MainFolder\1stSub-FolderA\2ndSub-FolderB
Junction created for D:\MainFolder-Copy\1stSub-FolderA\2ndSub-FolderB <<===>> C:\MainFolder\1stSub-FolderA\2ndSub-FolderB

C:\>mklink /j D:\MainFolder-Copy\1stSub-FolderB\2ndSub-FolderA C:\MainFolder\1stSub-FolderB\2ndSub-FolderA
Junction created for D:\MainFolder-Copy\1stSub-FolderB\2ndSub-FolderA <<===>> C:\MainFolder\1stSub-FolderB\2ndSub-FolderA

C:\>mklink /j D:\MainFolder-Copy\1stSub-FolderB\2ndSub-FolderB C:\MainFolder\1stSub-FolderB\2ndSub-FolderB
Junction created for D:\MainFolder-Copy\1stSub-FolderB\2ndSub-FolderB <<===>> C:\MainFolder\1stSub-FolderB\2ndSub-FolderB

Результат:

C:\MainFolder>tree
Folder PATH listing for volume C System
C:.
├───1stSub-FolderA
│   ├───2ndSub-FolderA
│   └───2ndSub-FolderB
└───1stSub-FolderB
    ├───2ndSub-FolderA
    └───2ndSub-FolderB

D:\MainFolder-Copy>tree
Folder PATH listing for volume Dosya
D:.
├───1stSub-FolderA
│   ├───2ndSub-FolderA
│   └───2ndSub-FolderB
└───1stSub-FolderB
    ├───2ndSub-FolderA
    └───2ndSub-FolderB

Как сделать это для всех только подпапок 2-го порядка с помощью нескольких команд вместо того, чтобы писать код вручную для каждой папки? Команды не должны создавать пересечение каталогов для подпапок 1-го, 3-го, 4-го, 5-го порядка.


person ide    schedule 04.11.2013    source источник


Ответы (1)


Попробуй это:

Get-ChildItem D:\MainFolder-Copy -Directory |
    Foreach {Get-ChildItem (Join-Path C:\MainFolder $_.Name) -Directory} | 
    Foreach {cmd /c mklink /j ($_.FullName -replace 'C:\\MainFolder','D:\MainFolder-Copy') $_.FullName}
person Keith Hill    schedule 04.11.2013
comment
Перед mklink должна быть указана команда cmd /c, поскольку термин «mklink» не распознается как имя командлета, функции, файла сценария или исполняемой программы. - person ide; 04.11.2013
comment
Да, mklink встроен в cmd.exe и не является исполняемым файлом. Спасибо. - person Keith Hill; 05.11.2013