如何按原样复制连接而不是它指向的文件夹?

问题描述 投票:0回答:3

我将一组文件夹从服务器 1 复制到服务器 2。在文件中,我还有交汇点:带有一组配置文件的文件夹:在服务器 1 上,该交汇点指向...比方说 c:\Config (包含 config1.cfg,配置2.cfg)

在服务器 2 上,我也有 c:\Config 具有相同的文件集,但当然它们包含我不想覆盖的自己的设置。

所以我想做的是按原样复制连接点。相反,我从服务器 1 获取 config1.cfg 和 config2.cfg 的副本:(

如何解决这个问题??

p.s.1。解释起来很长,但我无法避免在这里使用连接(它与必须放置配置的位置的限制有关(子文件夹-“连接”指向“外部”文件夹))

p.s.2。操作系统是Windows Server 2003

windows symlink junction
3个回答
9
投票

FastCopy 是一个可以做到这一点的小程序。


0
投票

在驱动器之间复制联结点没有任何意义 - 联结点指向磁盘上的特定节点。你真正想要的是一个符号链接,它指向文件系统中的特定path,但不幸的是,这在 Server 2003 上不存在。你在这里运气不好,你必须在一个文件中修复它。后复制脚本。


0
投票

您可以使用脚本重新创建交汇点列表。

https://github.com/andry81/contools/tree/master/Scripts/Tools/admin/Junction

列表连接点.bat

@echo off

for /F "usebackq eol= tokens=* delims=" %%i in (`@dir /A:L /B %* 2^>nul`) do echo.%%i
list-junction-points.bat /S c:\ > junction-points.lst

然后获取交汇点路径:

读取连接点.bat

@echo off

for /F "usebackq eol= tokens=* delims=" %%i in ("%~1") do for /F "usebackq eol= tokens=4,* delims= " %%j in (`dir /A:L "%%i\.." 2^>nul ^| findstr /R /C:"\[.*\]"`) do if "%%~ni" == "%%j" ( set "J=%%k" & call echo.%%i*%%J:~1,-1%%)
read-junction-points.bat junction-points.lst > junction-paths.lst

然后重新创建连接点(需要管理员权限):

创建连接点.bat

@echo off

for /F "usebackq eol= tokens=1,* delims=*" %%i in ("%~1") do ( echo."%%i" -^> "%%j" & mklink /j "%%i" "%%j" )
create-junction-points.bat junction-paths.lst 

仅在创建时需要连接点连接,这需要管理员权限。

© www.soinside.com 2019 - 2024. All rights reserved.