2011年5月24日火曜日

””とwindowsコマンドライン

&(アンパサンド)とwindowsコマンドラインの所で、「&」がパスに入ったせいで誤動作が起こったという事案を載せましたが、こちらもそれにからんだ内容です。

実は、パスを””で囲んでいれば、間に「&」が入っていても単なる文字列として扱われるため前記事のような自称は起きません。

今回使用したバッチでも””を使用していましたが、その使い方が間違っていたことが実は根本的な原因です。

一部を記載します。

↓の場合、カレントフォルダパスが「×××\aaa&bbbの場合」、「×××\aaa」が作成され、その配下にファイルがコピーされます。
---------------------------------------------------
1 SET MOTO1_DIR="H:\MCWEL_COM\MCWEL000\dsp\affair"
2 SET SAKI1_DIR=%~dp0dsp\affair
3 MkDir %SAKI1_DIR%
4 XCOPY "%MOTO1_DIR%" "%SAKI1_DIR%" /S /E /q
---------------------------------------------------

ちなみに、2行目と3行目の間に、ECHO SAKI1_DIR を入れると、ちゃんと「×××\aaa&bbb」が表示されます。
ですが、3,4行目で引数として使われる場合、””がうまく働かないようで、上記のような現象が起こります。

うまくいくパターンはこちらです。みなさまご注意を。
---------------------------------------------------
1 SET MOTO1_DIR="H:\MCWEL_COM\MCWEL000\dsp\affair"
2 SET SAKI1_DIR="%~dp0dsp\affair"
3 MkDir %SAKI1_DIR%
4 XCOPY "%MOTO1_DIR%" %SAKI1_DIR% /S /E /q
---------------------------------------------------

ちなみに、一度やってしまいましたが↓はうまくいきません。
---------------------------------------------------
1 SET MOTO1_DIR="H:\MCWEL_COM\MCWEL000\dsp\affair"
2 SET SAKI1_DIR="%~dp0dsp\affair"
3 MkDir %SAKI1_DIR%
4 XCOPY "%MOTO1_DIR%" "%SAKI1_DIR%" /S /E /q
---------------------------------------------------

理由は、まぬけすぎて恥ずかしくて大きな声では言えません(*ノДノ)

0 件のコメント:

コメントを投稿