2011-01-13 19 views
2

私はプロジェクトを分岐させるための簡単なハックとして、以下を行う.BATファイルにループを持っています(入力チェックなどが省かれています。 ):バッチファイルFORループからSVNコピーを実行する際の問題

branchToolのtest_branch "テスト枝ツール" "PROJ1、proj2"

をSVNはLOコマンド:

@for %%X in (%~3) do svn copy^
https://my.svn.account/%%X/trunk^
"https://my.svn.account/%%X/branches/%~1"^
-m "%~2" 

だからあなたが好きそれを使用しますOK右:

>branchTool.bat test_branch "testing branch tool" "proj1,proj2" 
svn copy https://my.svn.account/proj1/trunk "https://my.svn.account/proj1/branches/test_branch" -m "testing branch tool" 
svn copy https://my.svn.account/proj2/trunk "https://my.svn.account/proj2/branches/test_branch" -m "testing branch tool" 

しかしSVNは、実際に実行されていない - の.batファイルはちょうどすぐにコマンドを印刷をループし、何も起こりません。私はコンソールに書き込まれた各ラインの出力をし、それらを個別に実行し、コピー&ペーストした場合

、彼らはさておきをスクリプトをハッキング醜いDOSを使用しての期待

コメントとして働き、バグは何ですか?それは、一つでも入力プロジェクト名と同じに失敗例えばランニング:

branchToolのtest_branch「テストブランチ ツール」PROJ1

+0

は、一行だけを使用するようにしてくださいそして、次の行の最初の文字をエスケープする – jeb

+0

jeb:正しいものの、空白に注意してください - そして実際に出力を貼り付けるのは問題ありません。 –

+0

エスケープされたスペースがあるため、出力が複数行エスケープの結果と異なることを確認してください。 "SVN"を "echo"に置き換えた場合はどうなりますか? 「エコーオン」を有効にした場合は表示されますか? – jeb

答えて

0

私はあなたのキャレット文字の使用に関係していると仮定しています。私はいつもそれを避けていましたが、その理由を覚えていません。

代わりに中かっこを試してみることをお勧めします。例:

@for %%X in (%~3) do (
    svn copy https://my.svn.account/%%X/trunk "https://my.svn.account/%%X/branches/%~1" -m "%~2" 
) 

また、より良い妥当性/保守性のためにコマンドを分割することもできます。私は常に名前付きのパラメータを名前付きの環境変数に割り当てることを好みました。その後、パラメータの意図をスクリプトの後の読者に明らかにすることができます。 (私は通常、私は私の一時変数と呼び出し元の環境を汚染しないようにENDLOCAL/startlocalペアに任意の環境変数の使用をラップする例:。キャレットは、複数行を行うため

setlocal 
for %%X in (%~3) do (
    set SRC=https://my.svn.account/%%X/trunk 
    set DST=https://my.svn.account/%%X/branches/%~1 
    svn copy "%SRC%" "%DST" -m "%~2" 
) 
endlocal 
+0

ありがとう、あなたがBATファイルで中括弧を使用できることを認識していませんでした。 –

+0

しかし、あなたのバリアントが失敗する理由は説明しません。複数の改行が中括弧で実行されていますか? – jeb

-1

あなたはSVNの実行可能ファイルへの完全修飾パスを指定してみてくださいかもしれないが、例えばC:\ path \を\ Subversion \ svn.exeにコピーします。バッチスクリプトを実行すると、svn実行ファイルが環境のパスにない可能性があります。

+0

いいえ、既にテスト済みです - また、何も起こっていないのではなく、エラーが発生します。 –

関連する問題