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

VBSの質問です
1
2
3
という
3つのフォルダがあります
各フォルダに
a.vbs
1.vbs
2.vbs
3.vbs
の4つのvbsファイルが入っています
各フォルダの a.vbsを実行したら 各ファイル名に対応するVBSファイルを実行したいです
その場合どうすればいいのでしょうか?
2フォルダの場合 a.vbsを実行した時2.vbsだけ処理したいです
こんなの書いてみましたがうまくいきません

●質問者: fashudifhajs
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から
dim wsh
Dim objFileSystemObject
Dim strFolderPath
set wsh = CreateObject( "WScript.Shell" )
Set objFileSystemObject = WScript.CreateObject("Scripting.FileSystemObject")
strFolderPath = objFileSystemObject.GetFolder(".").Path
wsh.CurrentDirectory = strFolderPath & "."
wsh.Run "1.vbs"
wsh.CurrentDirectory = strFolderPath & "."
wsh.Run "2.vbs"
wsh.CurrentDirectory = strFolderPath & "."
wsh.Run "3.vbs"

1 ● a-kuma3
●500ポイント ベストアンサー

こんな感じになります。

Set fs = WScript.CreateObject("Scripting.FileSystemObject")

folderFullPath = fs.GetParentFolderName(WScript.ScriptFullName)
folderName = fs.GetBaseName(folderFullPath)
scriptName = folderFullPath & "\" & folderName & ".vbs"

If fs.FileExists(scriptName) Then
 Dim wsh
 Set wsh = WScript.CreateObject("WScript.Shell")
 wsh.Run scriptName
 Set wsh = Nothing
Else
 WScript.Echo "Not Exist Script. '" & scriptName & "'"
End If




追記です。

二つ上のフォルダ名を取得したい場合はどうすればいいのでしょうか?

先のスクリプトを、ちょっと変更しました。

Set fs = CreateObject("Scripting.FileSystemObject")

folderFullPath = fs.GetParentFolderName(WScript.ScriptFullName)
folderName = fs.GetParentFolderName(folderFullPath)
folderName = fs.GetBaseName(folderName)
scriptName = folderFullPath & "\" & folderName & ".vbs"
WScript.Echo scriptName

If fs.FileExists(scriptName) Then
 Dim wsh
 Set wsh = CreateObject("WScript.Shell")
 wsh.Run scriptName
 Set wsh = Nothing
Else
 WScript.Echo "Not Exist Script. '" & scriptName & "'"
End If

fashudifhajsさんのコメント
すみません 質問間違えてました 二つ上のフォルダ名を取得したい場合はどうすればいいのでしょうか?

fashudifhajsさんのコメント
例えば hoge1/hoge2 の中にa.vbsが入ってる場合 hoge1を取得したいです

a-kuma3さんのコメント
ディレクトリの階層と、スクリプトのある場所を、もうちょっと具体的にプリーズ。 1/hoge1 2/hoge2 3/hoge3 というような階層になっていて、hoge1 の下に a.vbs、1.vbs、2.vbs、... が、hoge2 の下にも a.vbs、1.vbs、2.vbs、... が存在している、ということで良いのですか?

fashudifhajsさんのコメント
あ、はい その通りです!

fashudifhajsさんのコメント
1/hoge 2/hoge 3/hoge という 3つのフォルダに 1.vbs 2.vbs 3.vbs が入っていて 二つ上のフォルダ名のvbsを動かしたいんです 2/hogeの中なら 2.vbsを実行したいんです

a-kuma3さんのコメント
回答に追記しました。 他の質問も開きっぱなしになってますけど、きちんと答えになってるんですよね? ドキドキします <tt>:-)</tt>

fashudifhajsさんのコメント
あ、はい 回答になってます! もっといろんなソースコード見たいのでとりあえず開けてます

fashudifhajsさんのコメント
試してみましたが うまく動きません

fashudifhajsさんのコメント
>|| folderFullPath & "\" & ||< を削り 以下のようにすれば動きました >|| Set fs = CreateObject("Scripting.FileSystemObject") folderFullPath = fs.GetParentFolderName(WScript.ScriptFullName) folderName = fs.GetParentFolderName(folderFullPath) folderName = fs.GetBaseName(folderName) scriptName = folderName & ".vbs" WScript.Echo scriptName If fs.FileExists(scriptName) Then Dim wsh Set wsh = CreateObject("WScript.Shell") wsh.Run scriptName Set wsh = Nothing Else WScript.Echo "Not Exist Script. '" & scriptName & "'" End If ||<

a-kuma3さんのコメント
もしかして、a.vbs が、1.vbs と同じところに無いんじゃないですか? 一応、動作確認してから、回答してますよ。

a-kuma3さんのコメント
>|| scriptName = folderName & ".vbs" ||< だと、スクリプトが相対パスなので、1.vbs が存在しているディレクトリで a.vbs を動かさないと、スクリプトが見つからない、となります。 >|| scriptName = folderFullPath & "\" & folderName & ".vbs" ||< 回答で、上記のようにしてあるのは、カレントディレクトリがどこでも動作するためです。 例えば、1/hoge が見えているところで、 >|| d> cscript 1\hoge\a.vbs ||< と実行しても、1\hoge\1.vbs を実行するように書いてます。
関連質問

●質問をもっと探す●



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