17

スペースが埋め込まれている場合にパスマクロを処理するビルド後のファイルコピーステップをVS2010で作成しようとしています。コピーコマンドを二重引用符で囲んでみましたが、スペースが含まれているとコピーが呼び出されたときにエラーが発生します$(SolutionDir)。エラーメッセージのエコーされたコマンドラインには、二重引用符が表示されません。

copy "$(SolutionDir)$(Configuration)\*" "$(TargetDir)"

私も別々に試し\"まし""たが、どちらもエコーされたコマンドラインに2文字のエスケープシーケンスが表示されますか?ビルドステップで二重引用符を適切にエスケープするにはどうすればよいですか?

4

7 に答える 7

12

Visual Studio のビルド前のイベント コマンドで二重引用符を使用すると問題が発生しました。この問題に対するバッチ ファイルの解決策を見てきましたが、バッチ ファイルがすべての問題を解決するとは限らず、洗練されていないようです。 解決策は、終了二重引用符の前にスペースを入れることであることがわかりました。 詳細は以下の通りです。

次のコマンドは機能しましたが、パス内のスペースはサポートされませんでした:

subwcrev $(SolutionDir) $(SolutionDir)subwcrev_template.txt $(SolutionDir)version.h

他の開発者がソリューションをどこに配置するかについてはほとんど制御できないため、パス内のスペースをサポートする必要がありました。パスを引用符で囲んでスペースをサポートしようとして、次のコマンドを思いつきました。それは常に失敗します。

subwcrev "$(SolutionDir)" "$(SolutionDir)subwcrev_template.txt" "$(SolutionDir)version.h"

ほとんど偶然に、パスの最後の文字と二重引用符の間にスペースを入れて解決策を見つけました。

subwcrev "$(SolutionDir) " "$(SolutionDir)subwcrev_template.txt " "$(SolutionDir)version.h "

これはうまくいきました。Visual Studio Shell を使用する AVR Studio 6.1 でこれをテストしました。

于 2013-07-23T17:46:46.353 に答える
6

2 つの二重引用符の中に二重引用符を入れる必要があります。

ビルド後のステップでのコピー ファイルの例: copy /Y """C:\source path with spaces\somefile.txt""" """C:\destination path with spaces\"""

于 2012-08-17T15:03:39.210 に答える
6

他の答えを機能させることができませんでした。

最後に最後の「\」をエスケープしました:

"$(TargetDir)\"
于 2015-02-11T12:09:55.020 に答える
5

ビルド後のイベントを使用しないでください。
代わりに、MSBuild のAfterBuildターゲットの機能を使用してください。

プロジェクトを右クリックして、 を選択しますEdit Project File。AfterBuild イベントを追加します。

  <Target Name="AfterBuild">
    <ItemGroup>
      <FilesToCopy Include="$(SolutionDir)$(Configuration)\*" />
    </ItemGroup>
    <Copy SourceFiles="@(FilesToCopy)"
          DestinationFolder="$(TargetDir)"
          OverwriteReadOnlyFiles="true" SkipUnchangedFiles="false" Condition="'@(FilesToCopy)' != ''" />
  </Target>

生の cmd.exe によって実行される PostBuildEvent とは異なり、BeforeBuild/AfterBuild ターゲットはマネージ コードによって実行されるため、より堅牢な実行、優れた保守性および追跡可能性が保証されます。

于 2012-07-23T21:20:26.427 に答える