2

There are a lot of sub-folders and have to create directory junction for only 2nd order sub-folders.

Some part of current folder structure is shown below

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

Manual coding for each folder:

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

Result:

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

How to make it for all just 2nd order sub-folders with a few commands instead of writing the code manually for each folder? Commands should not create directory junction for 1st, 3rd, 4th, 5th.. order sub-folders.

ide
  • 107
  • 1
  • 3
  • 11

1 Answers1

5

Try this:

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}
Keith Hill
  • 194,368
  • 42
  • 353
  • 369
  • It should have "cmd /c" before mklink because "The term 'mklink' is not recognized as the name of a cmdlet, function, script file, or operable program." – ide Nov 04 '13 at 19:16
  • Yup, mklink is built into cmd.exe and is not an exe. Thanks. – Keith Hill Nov 04 '13 at 20:07