如何递归解析目录并将每个文件MKLINK到具有相同树结构的目标路径

Zhr*_*hro 5 windows symbolic-link command-line batch-file cmd.exe

我有一个a\包含文件和子目录的目录,我想将这些文件和子目录复制到路径中b\,而不是将我想MKLINK <link> <target>对每个文件执行调用的文件复制到新路径中,而不是执行实际复制。

所以如果我有一个目录:

Z:\a\file1.txt
Z:\a\file2.txt
Z:\a\some_path\file3.txt
Z:\a\some_path\file4.txt
Run Code Online (Sandbox Code Playgroud)

我将链接从路径复制a\b\结果将如下所示:

Z:\b\file1.txt           <<===>> z:\a\file1.txt
Z:\b\file2.txt           <<===>> z:\a\file2.txt
Z:\b\some_path\file3.txt <<===>> z:\a\some_path\file3.txt
Z:\b\some_path\file4.txt <<===>> z:\a\some_path\file4.txt
Run Code Online (Sandbox Code Playgroud)

如果目标目录没有匹配的文件夹结构,则目录层次结构将保留为非链接文件夹。请注意,只有文件是链接

一个成功的测试将成功,其中Z:\b是一个空目录,Z:\b包含一个文件夹Z:\b\some_path,以及之前的测试但Z:\b我已经包含同名文件;冲突将被忽略,并且不会为它们创建链接。

如何使用批处理文件执行此操作,除了标准 Windows 10 安装中可用的依赖项之外,没有其他依赖项?

Vom*_*yle 0

模拟递归文件和文件夹结构MKLink

注意: 仅当目标路径文件夹尚不存在时,这才有效。

您可以简单地使用带有参数的mklink命令/J来创建一个目录连接,将链接路径指向链接两者的源根目录的位置,并根据需要创建一个模拟目录结构,并递归引用下面的文件。


批处理脚本

@ECHO ON

SET SrcRoot=Z:\a
SET LinkRoot=Z:\b
MKLINK /J "%LinkRoot%" "%SrcRoot%"

PAUSE
EXIT
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

在此输入图像描述

在此输入图像描述


更多资源

  • MKLink
  • mklink /?

    Creates a symbolic link.
    
    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.
    
    Run Code Online (Sandbox Code Playgroud)