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