Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

WScript.Argumentsで空白を含む248(260?)文字以上のパスを扱う

WSHスクリプトに、空白を含む248(260?)文字以上のパスを持つファイルをドラッグ&ドロップすると、ファイル名が空白の前と後で2つの引数として扱われてしまう。
空白を含むパスでも、上記の制限より短いパスなら問題なく1つの引数として扱われる。

回避方法は現在調査中だがエクスプローラからドラッグ&ドロップする使い方をしている限り、あまり良い回避方法はなさそう。
(空白が複数個あった場合の扱い、空白が2個以上連続したファイル名の扱い、相対パスやUNC形式パスの扱いを考えると、2つの引数を繋げ直すという方針は泥沼化しそう)

コマンドラインから実行するなら、パスをUNC形式で渡せば大丈夫という噂があるが、これは相対パス指定の場合は使えない。

回避方法

上記の問題が発生するのは

  • WSHスクリプトのファイル(*.js/*.vbs)へ直接ファイルをドラッグ&ドロップした場合
  • WSHスクリプトのファイル(*.js/*.vbs)へのショートカットにファイルをドラッグ&ドロップした場合

だけで、以下の場合は問題ない。

  • wscript.exe "【WSHスクリプトのファイル(*.js/*.vbs)】" へのショートカットにファイルをドラッグ&ドロップした場合

なお、260文字というのはWin32のMAX_PATHね。