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

时间:2015-10-15 19:18:00

标签: batch-file cmd mklink

以前在Windows 7中,我能够将“我的文档”文件夹的文件路径更改为网络映射(来自H:\ John Doe Documents)。由于我们已经切换到Windows 7,因此我必须使用一种解决方法,将链接文件从C驱动器上的文件夹转换为映射位置,并在文件实际链接之前将其包含在My Documents库中。

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

这是我目前使用的脚本

@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\

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

有任何帮助吗?希望它很简单,我很想念。提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以使用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
    )
)

答案 1 :(得分:0)

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

这是完成的工作代码,非常感谢,德米特里!你能解释一下这些通配符是什么吗?对不起,我还要进入很多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
    )
)