人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

DOS のバッチファイルに関する質問です。

a.bat の内容は以下です。

notepad.exe %1

このバッチファイルに「test&test.txt」のような半角"&" を含んだファイルを渡す場合にコマンドプロンプトを起動して

(1)
> a.bat test&test.txt

と実行すると「ファイル test.txt は見つかりません。新しく作成しますか?」というメッセージが表示されてしまいます。この問題を解決するには

(2)
> a.bat "test&test.txt"

のように""で囲って実行すればいいのですが、a.bat に「test&test.txt」をドラッグ&ドロップした場合にも、(1)ではなく(2)の動作をさせる方法はありますか?


●質問者: naka-m
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:DoS exe test txt コマンドプロンプト
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● きゃづみぃ
●10ポイント

Windows2000で 確認しましたが

ドラッグ&ドロップの場合は、問題なく そのファイルが 開きましたよ。

OSによって 動作が 違うのでしょうか?

◎質問者からの返答

しまった…Win2000では未確認でした。検証ありがとうございます。

OS はWinXP Pro です。WinXP Pro で動作すれば問題ないです。


2 ● きゃづみぃ
●10ポイント

あ、原因が わかりました。

デスクトップから ドラックしたから できました。

スペースを 含む フォルダの下に テキストファイルを 置き

そこからドラッグすれば できます。

OSの仕様みたいなので 回避は 難しそうですね。

バッチファイルは

echo %1

notepad.exe %1

とすれば ドラッグして 渡されるファイル名が 確認できます。

◎質問者からの返答

なるほど。パスにスペースが含まれる場合は全体を""でくくってくれるのですね…なんとかしてくれよ...orz


3 ● Mook
●10ポイント

スペースであれば、"%1"のようにすることで回避できると思いますが、& はDOSでは特殊な意味で使われるので、(たぶんそのせいで)ドラッグアンドドロップで正確な名前を受け取ることができません。


VBS になりますが、a.bat の変わりに下記のように a.vbs を作成し

CreateObject("WScript.Shell").Run "notepad.exe " & WScript.Arguments.Item(0)

ドラッグ&ドロップで試したところ、こちらは問題ないようです。


ご参考までに。

◎質問者からの返答

ありがとうございます。

一応vbs でこの問題が解決するのは確認済みなのですが、実際動かすのはnotepad ではない関係でvbs だと別の問題が発生するのです...。vbs にする場合、その件はまた別途ご質問させて頂きますが、出来ればバッチで解決したいと考えています。


4 ● Mook
●100ポイント ベストアンサー

折衷案ですが、

a.vbs

CreateObject("WScript.Shell").Run "cmd /C D:\a.bat """ & WScript.Arguments.Item(0) & """"

というのはどうでしょうか。

ドラッグ&ドロップで、VBS経由でバッチが実行されます。

◎質問者からの返答

動きました!

このやり方も試してみたのですが、ワタクシには動くやつが書けませんでしたw

これでなんとかなりそうです。ありがとうございました。


5 ● しおり
●20ポイント

バッチファイル(cmd.exe?)へドロップする時だけおかしいようです。

(なので、バグではないかと思います。)


よって、一旦他のコマンドを経由して、引数の特殊文字をエスケープしてからバッチファイルへ渡せば回避できます。


例えば、次のようなコマンドを作っておいて、

D:\home\user\work\test\bat\args\system.rb

#!ruby
system "#{ARGV[0]} \"#{ARGV[1]}\""

次のようなショートカットへファイルをドロップすれば、"&"を含んだファイル名を正常にバッチファイルへ渡せます。

C:\usr\bin\ruby.exe D:\home\user\work\test\bat\args\system.rb D:\home\user\work\test\bat\args\a.bat

# もちろん、中継コマンド(system.rb)は Ruby でなくてなんでもかまいません。

◎質問者からの返答

ありがとうございます。

実際使うのは自分ではなくユーザなので原則どのPCでも動くようなものでないといけないという制約があります。説明不足で申し訳ありませんでしたが、参考にさせて頂きます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ