在Windows 7中硬链接整个目录的内容

时间:2012-10-16 19:08:46

标签: python scripting batch-file windows-7-x64 hardlink

哪种方法可以实现这一目标?我正在考虑一个批处理脚本,它将源文件夹和目标文件夹作为输入,然后在源文件夹上递归迭代,并为每个文件在目标文件夹中创建指向该文件(具有相同名称)的硬链接。 / p>

hardlink.bat "src dir" "dst dir"

results:
->src dir\file1 <==> dst dir\file1
->src dir\subdir\file2 <==> dst dir\subdir\file2

我尝试使用for循环执行此操作,但我对批处理脚本的经验有限,我不知道如何拆分源文件夹名称以在目标文件夹中重新创建相同的目录结构。任何提示都将不胜感激!

P.D:解决方案可以使用任何脚本语言。我目前安装了python 2.7.3

3 个答案:

答案 0 :(得分:2)

我喜欢免费的Link Shell Extension,它为您提供了创建硬链接的GUI工具,并且可以直接集成到资源管理器中。

如果要从脚本执行此操作,可以执行Windows“fsutil实用程序。另一个非常好的免费替代方案是来自junctionSysInternals实用程序..

可以从批处理脚本调用。同样,要从Python脚本执行一个或另一个,您可以使用os.system()函数或可能使用subprocess.Popen()类的实例。

答案 1 :(得分:1)

我试图用Windows批处理文件做同样的事情,这真的花了我很长时间......但这里是:

@echo off
setlocal
set target=%~f2
if not "%target:~-1%"=="\" set target=%target%\
xcopy /t /e /y "%~f1" "%target%"
cd %1
forfiles /s /c "cmd /v:on /s /c set relpath=@relpath&set relpath=!relpath:~3,-1!&if @isdir==FALSE fsutil hardlink create """%target%!relpath!""" @file>nul&if errorlevel 1 echo Failed for !relpath!"
endlocal

必须在提升的命令提示符下运行。

此外,所有路径不得包含!个字符(感叹号)。如果您知道如何处理,请发表评论!

答案 2 :(得分:1)

我希望我可以将此作为对用户1537366的评论,但我需要50点评论:S

要使批处理文件与感叹号一起使用,请尝试以下代码:

@echo off

    set source=
    set target=

    forfiles /s /P "%source%" /C "cmd /c if @isdir==TRUE (mklink /j \"%target%\@relpath\" @path ) else (mklink /h \"%target%\@relpath\" @path )"