将符号链接转换为Windows中的硬链接

时间:2015-12-03 23:49:29

标签: windows batch-file symlink

我想在Windows批处理脚本的目录中递归地将软链接转换为硬链接。我已经能够在linux中执行此操作,但我不太确定如何在批处理文件中完成此操作。有人能告诉我应该怎么做才能完成这项工作?

谢谢

1 个答案:

答案 0 :(得分:2)

我看到两种将符号链接转换为硬链接的方法:

  • 使用NTFSLinksView实用程序。

    @echo off
    set listfile="%temp%\links%random%.html"
    start /wait ntfslinksview /shtml %listfile% /folder "." /subfolders
    
    for /f "delims=>< tokens=5,9" %%a in ('
         find ">Symbolic Link<" %listfile%
    ') do (
        ren "%%a" "%%~nxa.bak"
        mklink /h "%%~fa" "%%b" && del "%%a.bak" || (ren "%%a.bak" "%%~nxa" & echo    %%a)
    )
    del %listfile%
    pause
    
  • 使用内置dir命令
    (这是一个简化的代码,无法处理名称中!的文件)。

    @echo off
    setlocal enableDelayedExpansion
    for /f "eol=* delims=" %%a in ('dir /s /AL /b "."') do (
        for /f "eol=* tokens=2 delims=>" %%b in ('dir "%%a" ^| find "<SYMLINK>"') do (
            set "target=%%b"
            set "target=!target: %%~nxa =!"
            set "target=!target:~0,-1!"
            for /f "eol=* delims=[ tokens=2" %%c in ("!target!") do (
                ren "%%a" "%%~nxa.bak"
                mklink /h "%%~fa" "%%c" ^
                && (del "%%a.bak") ^
                || (ren "%%a.bak" "%%~nxa" & echo    %%a)
            )
        )
    )
    pause