2016-12-14 14 views
0

私はSVN制御下でいくつかのphpプロジェクトを持っています。私はクライアントサイドで更新後にコンパイルされたphp-templateファイルを削除したい。これらのファイルは./tmp/smarty/compileフォルダにあります。ですから、Windowsのコマンドラインを使って私はこれを行うことができますプロジェクトプロパティのTortoiseSVNクライアント側のフック(キャッシュファイルの削除)

del /Q path_to_my_project\tmp\smarty\compile 

このコマンドをcmd.exeで実行すると、すべてのファイルが正常に削除されます。

プロジェクトプロパティの使用tsvn:postupdatehookプロジェクトパスには、%REPOROOT%プレースホルダを使用します。ので、私のコマンドは次のようになります。

del /Q %REPOROOT%\tmp\smarty\compile 

delcmd.exeコマンドですので、私は最初cmd.exeを実行し、目的のコマンドを実行する必要があります。そう最終的には私のフックコマンドは次のようになります。

cmd.exe /c del /Q %REPOROOT%\tmp\smarty\compile 

私は(reporootとの完全なパスに変更)Win+Rを使用して、これを実行すると、それはあまりにも正常に動作します。

は、それから私は(私は\/にスラッシュ置き換える必要があり、overwise SNVリポジトリではなく、ローカルパスにhttp -pathを返す)SVNのプロパティに次の行を入れて、プロジェクトを更新してみてください。だからここreporootが正常に作業コピーのパスを修正するために翻訳され

cmd.exe /c del /Q D:\_projects\webCakePHP\.....\tmp\smarty\compile 

:私はフックを実行したい場合はTortoiseSVNは私に尋ねます。 すべてがうまく見えますが、このフックを実行すると、tmp\smarty\compileのファイルは正常に削除されますが、の場合は、作業コピーディレクトリからすべてのファイルも削除されます。

質問は、私が間違っていると、正しい方法で更新後にファイルを削除する方法です。

私はいくつかの方法で引用符を入れようとしましたが、enythingをまったく削除しない、またはそのようなディレクトリがないと言います。

おかげで、私の質問への代替ソリューションとして

+0

おそらく、パスの前後に引用符を付けるのに役立ちます: 'del/Q"%REPOROOT%\ tmp \ smarty \ compile "';そうでなければ、スペースや他のトークンセパレータが発生すると、 'del'はそれを複数のパスとして予期せず解釈します... – aschipfl

+0

@aschipflパスに空白はありませんが、このような引用符は何もしません。私はパスと全体のdelコマンドと二重引用符delパスをエスケープして引用しようとしました:( – teran

+0

引用パスは害を及ぼすことはありません、それは単に空白とのトラブルを回避し、特殊文字をエスケープする必要性を避ける... – aschipfl

答えて

0

は、私はファイルを削除%REPOROOT%/binフォルダに.batファイルを作成しました:

pushd %~dp0..\tmp\smarty\compile 
del /Q * 
popd 

と私のフックCMD文字列が%REPOROOT%/bin/clearCache.batです。

bat-ファイル作成が必要であり、1行のフックではないため、これは私の質問に正確な答えではありません。

関連する問題