• 締切済み

VBScript のコマンドライン引数の文字数制限に関して

VBScript で作成したスクリプトに大量のフォルダを引数として渡したいのですが、コマンドライン引数の 文字数制限に引っかかってしまいエラーとなってしまいます。 OSの制限なので仕方ないのですが、何か工夫をして簡単に同様のことを実現する方法はないでしょうか? OS は Windows XP です。よろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

何でこんな質問が出るか判らない。 フォルダの中のファイル(多数)やフォルダを捉える例題はVBSの本に良く載っている。 実際に存在するフォルダの内のある特徴を持ったフォルダだけを対象にするなら、プログラムで選別するプログラムを組めるか(特徴をデータで捉えられるか)の問題になる。 ーー そういう特徴を捉えられない選別基準で選ばれるものなら、人間が配列やテキストファイルとして、プログラムでプログラムに与えないといけない。 テキストファイルなら作らないとならない。 配列ならプログラムに、初期化の形で与えないといけない。 ーー それら引数のフォルダの相互の関係は通常利用しないと思うので、フォルダ1つずつ与えて処理し、次は次のフォルダ名を与えて処理の繰り回しをすればよいのでは。 普通引数を多数並べるのは、別の性質のデータを引き渡すため並べるのが多く、 同性格のものを順次並べる(列挙する。順次処理する)ことは少ないと思う。 もちろん飛んできた処理での、処理の仕方をそう(順次処理する)組めばありえるのだが。

wds32862
質問者

補足

> 何でこんな質問が出るか判らない。 いきなり失礼な書き出しでびっくりしました。 それは貴方が質問を理解しないで条件付き前提の話をしているからですよ。 「VBSの本に良く載っている」のは親フォルダを引数に渡して条件を満たすフォルダが 対象というものなんじゃないですか? そういう質問じゃないです。 「同性格のものを順次並べることは少ない」は、それはないと思いますよ。 アーカイバなんかそういう指定が可能じゃないとあまりにも使いづらいし、少なくとも タブやMDIを実装しているソフトの多くは対応してます。 対応していないソフトと比べると少ないという意味ならナンセンスですしね。 フォルダ内の一部のファイルを選択して「送る」で処理したことないですか?

回答No.3

回答1です。 >結局どのように大量のフォルダを取得するかという問題に戻ってしまいますね。 またコマンドラインになってしまいますが、 dir /ad /s /b <ルートパス> で<ルートパス>以下のフォルダの一覧が表示されます。 回答1と合わせると、 for /f %i in ('dir /ad /s /b <ルートパス>') do hoge.vbs %i

wds32862
質問者

お礼

ご回答ありがとうございます。 あるフォルダの配下の全てのサブフォルダならvbsで簡単にできるのですが、選択したいです。 以下のようなイメージなので、パラメータにはどうしてもサブフォルダを指定する必要があります。 C:\folder1\subfolder1 ←対象 C:\folder1\subfolder2 ←対象外 C:\folder1\subfolder3 ←対象

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

本体VBSの外側にもう一段VBSをかませます。 外側のVBSは「大量のフォルダ」を1個ずつ内側のVBSに引数で渡す ようにします。これで、元のVBSは修正せずに済むでしょう。 外側のVBSは「大量のフォルダ」をどうやって取得するかですが、 ファイルや、環境変数などが考えられます。もし、特定のフォルダの 配下全てというなら、Folderオブジェクトを使った再帰呼び出しで 実現できます。 但し、元のVBSの仕様がどうなっているのでしょう? 1.フォルダを一つずつ処理する。 2.複数フォルダ間での操作を行う。 後者ですと、厄介ですね。

wds32862
質問者

お礼

大量のフォルダを処理するのが目的なので、本体のVBSを修正することに問題はないです。 結局どのように大量のフォルダを取得するかという問題に戻ってしまいますね。 ご回答ありがとうございました。

回答No.1

vbsに渡す引数はフォルダのパスだけですか? 確認してませんですが、以下でどうでしょうか。 (1)フォルダのリストをテキストファイルに保存(folderlist.txt)。 (2)コマンドラインで次のコマンドを実行。 for /f %i in (folderlist.txt) do cscript.exe hoge.vbs %i 以上。

wds32862
質問者

お礼

コマンドラインのfor文でこのような使い方があるのですね。 勉強になりました。 簡単に同様のことを実現するのが難しいようでしたら、こちらの方法を使わせていただきます。 ご回答ありがとうございました。

関連するQ&A