Windows符号链接



我正试图在每个用户主目录中的"reports"文件夹与master中的"reports"文件夹之间创建一个符号链接。

简而言之,我正在尝试将以下内容转换为Windows将理解的语言

for all users
   cd /path/to/firstname.lastname/reports
   ln -s ../masterUsername/reports

我试过

MKLINK /d /path/to/masterUsername/reports /path/to/firstname/lastname/reports

第一个用户很好,但它抱怨第二个用户的链接已经存在。

我也试过

/j

我不确定在这种情况下Junction和Directory之间到底有什么区别。

救命!!

在Linux/Unix中使用

ln -s target [linkname]

如果省略了linkname,则默认为target的基本名称。

然而,在Windows中,参数linknametarget的顺序相反,并且它们都是必需的:

mklink /d linkname target

此外,mklinkCMD内置的,因此它不能在PowerShell中单独使用。你需要这样使用它:

cmd /c mklink /d linkname target

如果(例如)你想在所有用户配置文件中创建一个符号链接,应该这样做:

$target = 'C:pathtomasterUsernamereports'
Get-ChildItem 'C:Users' | ? { $_.PSIsContainer } | % {
  cmd /c mklink /d (Join-Path $_.FullName 'reports') $target
}

请注意,使用mklink需要管理员权限。

编辑:要将reports文件夹从每个用户目录链接到一个中央报告目录,您可以执行以下操作:

$userdir = 'C:Users'
$hub     = 'C:pathtomasterUsernamereports'
Get-ChildItem $userdir | ? { $_.PSIsContainer } | % {
  $userReports = Join-Path $_.FullName 'Documentsreports'
  if (Test-Path -LiteralPath $userReports) {
    cmd /c mklink /d (Join-Path $hub $_.Name) $userReports
  }
}

最新更新