示范NTFS 卷上的硬链接

' Hardlinks.vbs
' 示范 NTFS 卷上的硬链接
' --------------------------------------------------------

Option Explicit

' 一些常量
Const L_NoHardLinkCreated = "Unable to create hard link"
Const L_EnterTarget = "Enter the file name to hard-link to"
Const L_HardLinks = "Creating hard link"
Const L_EnterHardLink = "Name of the hard link you want to create"
Const L_CannotCreate = "Make sure that both files are on the same volume and the volume is NTFS"
Const L_NotExist = "Sorry, the file doesn't exist"
Const L_SameName = "Target file and hard link cannot have the same name"

' 确定要(硬)链接的现有文件
dim sTargetFile
if WScript.Arguments.Count >0 then
   sTargetFile = WScript.Arguments(0)
else
   sTargetFile = InputBox(L_EnterTarget, L_HardLinks, "")
   if sTargetFile = "" then WScript.Quit
end if

' 该文件存在吗?
dim fso
set fso = CreateObject("Scripting.FileSystemObject")  
if Not fso.FileExists(sTargetFile) then
   MsgBox L_NotExist
   WScript.Quit
end if

' 主循环
while true
   QueryForHardLink sTargetFile
wend


' 关闭
WScript.Quit






' /
' // Helper 函数



' 创建硬链接
'------------------------------------------------------------
function QueryForHardLink(sTargetFile)
   ' 如果在命令行上指定了硬链接名,则提取它
   dim sHardLinkName
   if WScript.Arguments.Count >1 then
      sHardLinkName = WScript.Arguments(1)
   else
      dim buf
      buf = L_EnterHardLink & " for" & vbCrLf & sTargetFile
      sHardLinkName = InputBox(buf, L_HardLinks, sTargetFile)
      if sHardLinkName = "" then WScript.Quit  
      if sHardLinkName = sTargetFile then
         MsgBox L_SameName
         exit function
      end if
   end if

   ' 验证两个文件均在同一个卷上,且
   ' 该卷是 NTFS
   if Not CanCreateHardLinks(sTargetFile, sHardLinkName) then
      MsgBox L_CannotCreate
      exit function
   end if
  
   ' 创建硬链接
   dim oHL
   set oHL = CreateObject("HardLink.Object.1")
   oHL.CreateNewHardLink sHardLinkName, sTargetFile
end function


' 验证两个文件均在同一个 NTFS 磁盘上
'------------------------------------------------------------
function CanCreateHardLinks(sTargetFile, sHardLinkName)
   CanCreateHardLinks = false
  
   dim fso
   set fso = CreateObject("Scripting.FileSystemObject")
  
   ' 同一个驱动器?
   dim d1, d2
   d1 = fso.GetDriveName(sTargetFile)
   d2 = fso.GetDriveName(sHardLinkName)
   if d1 <> d2 then exit function

   ' NTFS 驱动器?
   CanCreateHardLinks = IsNTFS(sTargetFile)
end function


' IsNTFS() — 验证文件的卷是否为 NTFS
' --------------------------------------------------------
function IsNTFS(sFileName)
   dim fso, drv
  
   IsNTFS = False
   set fso = CreateObject("Scripting.FileSystemObject")  
   set drv = fso.GetDrive(fso.GetDriveName(sFileName))
   set fso = Nothing
  
   if drv.FileSystem = "NTFS" then IsNTFS = True
end function

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Link Shell Extension 是一个可以在 NTFS 文件系统中创建“硬连接”的 Windows 资源管理器扩展。“硬连接”让一个文件在多个目录下重复出现,但只占用一份文件的空间。例如,一个大小为 10MB 的“E:\a.doc”的文件,创建一个硬连接到“E:\共享文件夹\a.doc”中,则两个“a.doc”文件只占用一个文件的空间(10MB),两个文件的内容当然是完全一样的。如果编辑该文件的编辑器在修改保存文件时,依然保持源文件在 NTFS 文件夹中的位置,那么在“E:\a.doc”上所作的改动会自动反映到“E:\共享文件夹\a.doc”中。同理,修改了“E:\共享文件夹\a.doc”文件后,所作的修改也会立即反映到硬连接对应的“E:\a.doc”文件。“硬连接”还可以用于目录,这称为“目录连接点”(Junction)。例如,可以为“C:\Applications”目录创建一个硬连接到“E:\共享文件夹\Applications”,则两个目录共享同样的存储空间,在“C:\Applications”目录中对任何文件所作的改动都会立即反映到“E:\共享文件夹\Applications”目录中对应的文件中去。同理,修改“E:\共享文件夹\Applications”目录中的文件,改动也会立即反映到“C:\Applications”目录中去。创建硬连接之后,删除硬连接的副本(即连接点)只会将文件系统对文件数据的引用减一,只有删除所有的引用时,才真正删除文件。安装方法: 1、到主页下载安装文件,执行安装; http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#contact 2、使用资源管理器打开 Link Shell Extension 所安装到的目录,将“HardlinkShellExt.dll”重命名为其他名称的文件; 3、将汉化文件解压到该目录; 4、注销(或重启)后重新登录到 Windows。创建硬连接的操作方法: 1、在 Windows 资源管理器中,找到需要创建硬连接的文件,如 “E:\a.doc”; 2、右键点击该文件,选择“选定源连接点”。 3、转到需要创建连接点的地方,如“E:\共享文件夹”。 4、右键点击资源管理器文件列表的空白位置,选择“创建硬连接”(如果是目录,可选择“创建连接点→目录连接点[或其他选项]”)——在资源管理器的状态栏中对操作命令有说明。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值