0

归档这个的最好方法是什么?我正在考虑一个批处理脚本,该脚本将源文件夹和目标文件夹作为输入,然后递归地遍历源文件夹,并为每个文件在目标文件夹中创建指向该文件(同名)的硬链接。

hardlink.bat "src dir" "dst dir"

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

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

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

4

3 回答 3

2

我喜欢免费的Link Shell Extension,它为您提供创建硬链接的 GUI 工具,并直接集成到 Explorer 中。

如果您想从脚本中执行此操作,您可以执行 Windows 的fsutil实用程序。另一个非常好的免费替代品是SysInternals的junction实用程序。

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

于 2012-10-16T19:31:59.627 回答
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

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

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

于 2013-12-31T13:57:26.060 回答
1

我希望我可以简单地将其作为对 user1537366 的评论,但我需要 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 )"
于 2016-12-09T08:57:16.677 回答