有没有办法将UNC路径映射到Windows 2003上的本地文件夹?

时间:2010-12-02 19:54:46

标签: windows path local unc

我知道我可以将UNC路径映射到本地驱动器号。但是,我想知道是否有办法将UNC路径映射到本地文件夹。我有一个程序,其中有一个特定的文件夹硬编码到程序中,我想尝试创建一个具有相同名称的文件夹映射到UNC路径,以便可以从网络共享访问数据。这可行吗?具体来说,这是在Windows 2003服务器上。

7 个答案:

答案 0 :(得分:19)

是的,有一种方法可以将UNC路径映射到本地文件夹:

C:\>mklink /D Develop \\obsidian\Develop
symbolic link created for Develop <<===>> \\obsidian\Develop

这是因为我希望 build 服务器使用我自己的PC的Develop文件夹作为其Develop文件夹:

10/20/2012  11:01 AM    <SYMLINKD>     Develop [\\obsidian\Develop]

你有它。


MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is a file
                symbolic link.
        /H      Creates a hard link instead of a symbolic link.
        /J      Creates a Directory Junction.
        Link    specifies the new symbolic link name.
        Target  specifies the path (relative or absolute) that the new link
                refers to.

注意:在我的实际情况中,我需要另一级别的重定向,因为我正在使用的程序意识到Develop是一个符号链接,指向到一台远程机器,并拒绝遵守。我告诉程序关闭并通过给它指向本地资源的联结来执行它所说的内容。

10/20/2012  11:06 AM    <JUNCTION>     Develop [C:\Develop2\]
10/20/2012  11:01 AM    <SYMLINKD>     Develop2 [\\obsidian\Develop]

答案 1 :(得分:15)

这完全符合OP所要求的 - 一个映射到网络共享的Windows 2003的符号链接。经过几个小时查看其他人并对其进行测试,这是我发现的唯一可以与网络共享一起使用的组件。

Windows XP的符号链接驱动程序

此实用程序适用于XP和2003映射到网络共享并创建符号链接:http://schinagl.priv.at/nt/ln/ln.html#symboliclinksforwindowsxp

现在把它放在你放在路径上的目录中,你就可以使用senable.exesymlink.sys}和ln.exe来创建符号链接(你需要从上面的站点以及它对Visual C ++运行时DLL的依赖。)

新增奖金:假冒MkLink

将这些额外的两个文件放在您拥有senable.exe的同一目录中,并确保这一切都在路径上。

mklink.cmd:

@echo off

SET DIR=%~dp0%
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "& '%DIR%Symlink.ps1' %*"

pushd "%DIR%"
"%DIR%senable.exe" start
popd

Symlink.ps1:

param (
 [string]$symlinktype,
 [string]$link,
 [string]$target
)

$scriptpath = $MyInvocation.MyCommand.Path
$ScriptDir = Split-Path $scriptpath

$senable = Join-Path "$ScriptDir" senable.exe
$ln = Join-Path "$ScriptDir" ln.exe

pushd "$ScriptDir"
& cmd /c "$senable" install
popd
& cmd /c "$ln" -s "$target" "$link"

注意:

您需要在Windows 2003上安装以下其他项目(非R2,我还不完全确定您对R2的需求):

  • Microsoft .NET Framework 2.0 Service Pack 1
  • Windows Imaging Component
  • Windows Server 2003 Service Pack 2
  • Windows Management Framework Core(这会带来PowerShell 2)

巧克力包

我创建了一个巧克力包,可以为您完成所有这些:http://chocolatey.org/packages/win2003-mklink

重要提示

与常规符号链接不同,您不能简单地删除文件夹以删除符号链接文件夹。如果这样做,它将删除它指向的真实文件夹。所以要特别小心使用。

答案 2 :(得分:4)

您不能直接执行此操作,但如果您创建了符号链接,则应该能够将其指向映射的驱动器号。

net use e:\\ shares \ folder#你想要将其设置为持久性,或者下次重启将会破坏它。

使用cmd浏览到您想要链接的位置

cd c:\ folder

mklink / d名称e:\

现在访问c:\ folder \ name \的任何内容都将访问\\ shares \ folder \

答案 3 :(得分:2)

根据Microsoft,您无法将远程计算机(服务器)上的共享文件夹映射到本地文件夹。例如:

  • 服务器上的共享文件夹:\\ Server \ share1
  • 在本地计算机上映射共享:c:\ MyProgram \ Some_Useluf_Files_Here

这不会起作用!!!!正如微软所说,你不能在远程机器上做 mklink ,至少不能用于 Junction Hard-links 。您只能将其作为符号链接进行,这基本上是一种快捷方式。因此,如果某个程序需要访问与服务器上相同的本地文件夹...抱歉没有运气! Windows不是Linux让我们不要忘记taht :-(

答案 4 :(得分:1)

你无法直接映射,不。您可以尝试实现已注册为文件系统一部分的Shell命名空间扩展,以便您可以根据需要进行根,然后让它在内部访问UNC路径。实现起来并不是一件微不足道的事情,但它应该能够为您提供最终结果。

答案 5 :(得分:0)

假设您要将\\ moo \ cow映射到C:\ cow_files,并且还没有一个名为moo的服务器(如果您可以直接共享该文件夹,那么我认为没有),你可以:

  1. 编辑hosts文件(如果可以,还可以编辑实际的DNS)以将moo映射到具有C:\ cow_files的计算机上。 (如果目录是需要映射的客户端的本地目录,则为localhost。)

  2. 将C:\ cow_files分享为该机器上的牛。

  3. 然后你应该能够映射到\\ moo \ cow并获取你需要的文件,除非我遗漏了某些东西(这是可能的:))。

答案 6 :(得分:0)

经过多次尝试后,我终于发现你不能按照我想要的方式去做。我尝试使用Server 2008中的mklink功能进行符号链接,但事实证明.NET System.IO api无法识别符号链接。因此,如果在符号链接的文件夹上执行Directory.GetFiles(),则会抛出错误。