LoginSignup
0

posted at

updated at

error MSB3073 は コマンドの構文が誤っています。

だいたいパスのマクロで間違えている説

結論から書くとパス系、ファイル名系のマクロは、ダブル(シングル)クォーテーション"$(...)"で囲みましょう。

copyコマンドと$(TargetPath)マクロで例えます

次のようにクォーテーションで囲っていない場合、エラーになる可能性があります。

マクロが置換される前
copy $(TargetPath) C:\Test\

$(TargetPath)マクロは実際のビルド出力先のフルパスに置き換えられます。フルパスを仮にC:\foo barとします。
下記にマクロがフルパスに置き換わった例を書きます。

マクロが置換された後(動作しません)
copy C:\foo bar C:\Test\

copyコマンドに限った話ではありませんが、パスにスペース文字が含まれるとコマンドとしての意味が変わってきます。結果コマンド構文エラーになります。

基本的な書き方👍
rem 書式: copy <送り側> <受け側>
rem                   ^ (スペース(空白)文字で区切ることで「送り側」と「受け側」を認識する)
rem 細かいオプションは省いてますが、スペース文字ひとつで意味が変わります

copy "$(TargetPath)" "C:\Test\"

大事なことなので繰り返しますが、パスはクォーテーション"$(...)"で囲みましょう

【おまけ】renameのワナ

👎
rename "C:\Test\$(TargetFileName)" "C:\Test\$(TargetFileName).old"

???💢
これにはちょっと引っかけられました。

renameのヘルプは次のようになってます。

RENAME [ドライブ:][パス]ファイル名1 ファイル名2
REN [ドライブ:][パス]ファイル名1 ファイル名2

ファイル名2 には新しいドライブもパスも指定できないので注意してください。

もうお分かりですよね。

👍
rename "C:\Test\$(TargetFileName)" "$(TargetFileName).old"

素直にmoveコマンドに切り替えたほうが良い説ある…。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0