使用 SymbolicLink 对文件夹使用通配符

Using Wildcard for folder using a SymbolicLink

之前在 Windows 7 中,我能够将“我的文档”文件夹的文件路径更改为网络地图(例如 H:\John Doe Documents)。自从我们切换到 Windows 7 后,我不得不使用一种解决方法,即从 C 驱动器上的文件夹中创建一个 linked 文件到映射位置,并将其包含在我的文档库中文件实际上是 linked。

我们当前的文件结构为 - \servername\homefolder\%username%\John Doe Documents\servername\homefolder\%username%\johndoedocuments。创建符号 link 时,我需要覆盖这两个文件夹。

这是我目前使用的脚本

@echo off

mkdir c:\Documents
echo.
echo.

echo Right click My Documents and add C:\Documents to the Library Locations.
echo.
echo.

pause
rd C:\Documents
mklink /D C:\Documents \servername\homefolder\%username%\*documents\

目前这不起作用。如果我删除 *documents\ 它确实有效。我尝试这样做的原因是因为我们还将 outlook 的用户 pst 文件存放在 \%username% 文件夹中,我们不希望用户看到该文件夹​​并可能将其删除。宁愿他们直接进入文档文件夹。

有什么帮助吗?希望这是我所缺少的简单东西。提前致谢!

您可以使用if exist ...来检测哪个路径存在。

if exist "\servername\homefolder\%username%\John Doe Documents" (
    mklink /D C:\Documents "\servername\homefolder\%username%\John Doe Documents\"
    goto :eof
)
if exist "\servername\homefolder\%username%\johndoedocuments" (
    mklink /D C:\Documents "\servername\homefolder\%username%\johndoedocuments\"
    goto :eof
)

更新。

我想你可以用这种方式使用通配符

for /d %%A in (\servername\homefolder\%username%\*documents) do (
    if exist "%%~fA" (
        mklink /D C:\Documents "%%~fA"
        goto :eof
    )
)

进行了一些更改,要使其正常工作,您必须先在 C 中创建 Documents 文件夹,将其添加到库中,然后创建 link;否则它将无法工作,因为网络驱动器未编入索引并且您无法将未编入索引的文件添加到库中。

这是完整的工作代码,非常感谢,德米特里!你能解释一下这些通配符是什么吗?抱歉,我还在处理很多 cmd 命令。除了 %%A%%~fA 部分外,我了解大部分内容 :)

@echo off
mkdir C:\Documents
pause
for /d %%A in (\servername\homefolder\%username%\*documents) do (
    if exist "%%~fA" (
        rd C:\Documents
        mklink /D C:\Documents "%%~fA"
        goto :eof
    )
)