0

これをアーカイブするための最良の方法はどれですか?ソースフォルダーと宛先フォルダーを入力として受け取り、ソースフォルダーを再帰的に繰り返し、ファイルごとに宛先フォルダーにそのファイル(同じ名前)へのハードリンクを作成するバッチスクリプトについて考えていました。

hardlink.bat "src dir" "dst dir"

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

forループを使用してこれを実行しようとしましたが、バッチスクリプトの使用経験が限られており、ソースフォルダー名を分割して宛先フォルダーに同じディレクトリ構造を再作成する方法がわかりません。ヒントをいただければ幸いです。

PD:ソリューションは任意のスクリプト言語を使用できます。私は現在Python2.7.3をインストールしています

4

3 に答える 3

2

ハードリンクを作成するためのGUIツールを提供し、Explorerに直接統合されている無料のLinkShellExtensionが気に入っています。

スクリプトから実行する場合は、Windowsのfsutilユーティリティを実行できます。もう1つの非常に優れた無料の代替手段は、SysInternalsのジャンクションユーティリティです。

どちらもバッチスクリプトから呼び出すことができます。同様に、Pythonスクリプトからいずれかを実行するには、os.system()関数または場合によってはsubprocess.Popen()クラスのインスタンスを使用できます。

于 2012-10-16T19:31:59.627 に答える
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 relpath=@relpath&set relpath=!relpath:~3,-1!&if @isdir==FALSE fsutil hardlink create """%target%!relpath!""" @file>nul&if errorlevel 1 echo Failed for !relpath!"
endlocal

管理者特権のコマンドプロンプトで実行する必要があります。

!また、すべてのパスに文字(感嘆符)を含めることはできません。それを処理する方法を知っているなら、コメントを投稿してください!

于 2013-12-31T13:57:26.060 に答える
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 )"
于 2016-12-09T08:57:16.677 に答える