2012-10-16 32 views
0

這是實現這個目標的最佳方式嗎?我正在考慮將源文件夾和目標文件夾作爲輸入的批處理腳本,然後在源文件夾上遞歸迭代,併爲每個文件在目標文件夾中創建一個到該文件(具有相同名稱)的硬鏈接。硬鏈接windows 7中整個目錄的內容

hardlink.bat "src dir" "dst dir" 

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

我試着用這樣的循環,但我有一批腳本技術是有限的,我不知道如何分割源文件夾名稱重新創建在目標文件夾相同的目錄結構。任何提示將不勝感激!

P.D:該解決方案可以使用任何腳本語言。我目前已安裝python 2.7.3

回答

2

我喜歡免費的Link Shell Extension,它爲您提供GUI工具來創建硬鏈接,並且集成到資源管理器中。

如果您想從腳本執行此操作,則可以執行Windows的'fsutil實用程序。另一個非常好的免費替代方法是0123B實用程序,從SysInternals ..

可以從批處理腳本中調用它們。同樣,要從Python腳本中執行一個或另一個,您可以使用os.system()函數或subprocess.Popen()類的一個實例。

+0

看起來不錯,我會看看它。然而,這不能回答我的問題,我仍然希望從腳本中完成此操作(我喜歡看到會發生什麼,並希望能夠自定義它) –

+0

@PabloMescher:我相信你問最好的方法來實現它;-) – martineau

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 [email protected]&set relpath=!relpath:~3,-1!&if @isdir==FALSE fsutil hardlink create """%target%!relpath!""" @file>nul&if errorlevel 1 echo Failed for !relpath!" 
endlocal 

必須在提升的命令提示符下運行。

此外,所有路徑不得包含!字符(感嘆號)。如果你知道如何處理,請發表評論!

+0

爲什麼不只是使用「mklink」命令而不是fsutil? –

+0

@GruffMcGruff是的,你可以。這是相同的。 – user1537366

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)" 
+1

要贏得聲望,您可以回答最新的問題。 – abhiarora