ただの備忘記録

忘れないように記録を残します。忘れるから記録に残してます。そして、その記録が役立つといいかな。

バッチファイル(変数の結合とパラメータ)

2016年01月11日 | Windows

変数にパス名を入れてスペースやダブルクォーテーションがある場合の注意点をメモしておく。

■バッチファイルで変数を使う

set 変数名=文字列

文字列がパス名でスペースが含まれる場合、スペースで区切られて別のパラメータとして処理されてしまう。
例えば

set pathA=\dir01\00 category\files
set pathB=\data backup\files
robocopy %pathA% %pathB%

2つの変数のそれぞれにペースがあるため、robocopyを実行すると4つのパラメータを渡したことになる。
これを防ぐためには""を使う。

set pathA="\dir01\00 category\files"
set pathB="\data backup\files"

■変数の文字列を結合する

set 変数名=%変数1%%変数2%

次の場合、問題が発生する。

set pathA="\dir01\00 category"
set pathB="\files"
set pathAB=%pathA%%pathB%

pathAとpathBを””で囲っているため、pathABは「"\dir01\00 category""\files"」となる。
これではcopyやrobocopyにパラメータとして渡すときに正しく処理されない。

解決案①

set pathA=\dir01\00 category
set pathB=\files
set pathAB="%pathA%%pathB%"

変数を結合してから""で囲む。

解決案②

set pathA="\dir01\00 category"
set pathB="\files"
set pathAB=%pathA:~0,-1%%pathB:~1%

結合時に文字列の一部を抜き出す。
上記例では、pathAは先頭(0番)から後ろの1文字前(-1番)までを取るので、後ろの"がなくなる。
同様にpathBは先頭1文字目の後(1番)から最後までを取るので、先頭の"がなくなる。

pathABは「"\dir01\00 category\files"」となる。

解決策③

set pathA="\dir01\00 category"
set pathB="\files"
set pathAB=%pathA%%pathB%
set pathAB=%pathAB:""=%

3行目までは問題のあるままで、4行目で解決させる。
ちょっと強引かもしれないが、""を空のテキストに置き換えてしまう。

解決案④

set pathA=\dir01\00 category
set pathB=\files
set pathAB=%pathA%%pathB%

copy *.* "%pathAB%"

変数に入れるときではなく、命令のパラメータとするときに""で囲う。

おそらく④が標準的な記述方法ではないだろうか。



最新の画像もっと見る

コメントを投稿