ドラッグ・アンド・ドロップ(以下、D&D)によるバッチファイルを作成する際にダブルクリックでバッチファイルを開こうとする行為のフェールセーフを考えています。
現状では、以下のバッチファイルにファイルやフォルダをD&Dするとif文の分岐の箇所で終了してしまいます。
有識の方の教授をお願いします。
@echo off
if "%1"=="" goto error
rem D&Dされたパスを表示
echo %1
echo 終了しました。
goto end
:error
echo このファイルはダブルクリック形式ではありません。
echo ファイルやフォルダをD&Dして下さい。
pause
exit
:end
exit
開発環境
OS:WindowsXP
以上、よろしくお願いします。
XPで長いファイル名の問題ということですから、
コマンドプロンプト用の対策で構わないですかね?
if "%~1"=="" goto error
というふうに%の後に~(チルダ)を入れてください。
パラメータが引用符で囲われているときは引用符が取り除かれます。
パラメータが引用符で囲われていなければそのままです。
%~構文は他にもいろいろあるので
for /?
とか
set /?
とかで表示されるヘルプを読んでみてください。
実際に動かしてみてわかりました。
ファイルのフルパスに空白文字が含まれている場合、%1 にはパスをダブルクォーテーション(")でくくった文字列が渡されます。
(たとえば、"C:\Sample File.txt" の様に)
なので、if 文で正常な文法にならずに異常終了していたのでしょう。
比較分のところのダブルクォーテーションをシングルクォーテーション(')に変える、あるいは if not exist 文に変える、等の方法で回避できるかと思います。