デスクトップにa.vbs b.vbsがあります
a.vbsをデスクトップからダブルクリックで起動させるとb.vbsが実行できるのですが
a.vbs
***************
dim wsh
Dim objFileSystemObject
Dim strFolderPath
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "b.vbs"
***************
タスクマネージャにa.vbsを登録して実行すると
エラーが出てb.vbsを実行できません
a.vbsの中のb.vbsの前に絶対パスを入れれば動くのですが
a.vbsはいろいろな環境で使うので同じフォルダを相対パスで設定しb.vbsで実行できるようにしたいのですが
どのようにすればいいでしょうか?
プログラム中で、a.vbsの絶対パス名を取得してから加工し、b.vbsの絶対パス名を生成するように実装すればOKです。
スクリプト自身の絶対パスは、WScript.ScriptFullNameから取得可能です。例として以下のようなコードを書けば、b.vbsの絶対パスが得られます。
Dim script
script = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\")) & "b.vbs"
タスクスケジューラでタスクを作成する際、カレントディレクトリにデスクトップのパスを指定してはいかがでしょうか?
下記ページの「カレント・フォルダ」の箇所です。
http://www.atmarkit.co.jp/ait/articles/1305/31/news049.html
次は、実行するプログラムのありかとコマンドライン・パラメータ、実行時のカレント・フォルダを指定する。
しまった、被ってしまいました X-|
しかも参考URL まで同じという……
私が行ったテストでは、上記カレントディレクトリの設定で正常動作しました。
カレントディレクトリを指定しないと「C:\Windows\System32」がカレントディレクトリになるようですね。
また、スクリプト内で解決したい場合は、次のように記述すれば正常動作しました。
WSHShell.Run "b.vbs"
↓
WSHShell.Run Replace(WScript.ScriptFullName,WScript.ScriptName,"") & "b.vbs"
a.vbs を登録したタスクのプロパティで「操作」タブの「プログラムの開始」に「開始(オプション)」という項目があります。
そこに a.vbs を置いてあるフォルダの絶対パスを記述すると、b.vbs を見つけられると思います。
http://www.atmarkit.co.jp/ait/articles/1305/31/news049.html#wi-scr07.gif
※画像は、ウィザードでのダイアログです
ページの最後の方にプロパティ変更のダイアログの絵があります(操作タブが選択されていませんが)。
構文エラーですとなります
2013/11/19 15:32:04失礼、VBSだと$が要りませんでした。
2013/11/19 15:53:05