LoginSignup
2
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-07-21

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

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

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コマンドに切り替えたほうが良い説ある…。

2
0
0

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
  3. You can use dark theme
What you can do with signing up
2
0