VBSの質問です

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

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2014/12/04 01:37:22
  • 終了:2014/12/05 10:54:30
id:fashudifhajs
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"

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4441ベストアンサー獲得回数18252014/12/04 08:22:50

ポイント500pt

こんな感じになります。

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
他9件のコメントを見る
id:a-kuma3

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

2014/12/04 18:00:23
id: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 を実行するように書いてます。

2014/12/05 10:37:52

その他の回答(0件)

id:a-kuma3 No.1

a-kuma3回答回数4441ベストアンサー獲得回数18252014/12/04 08:22:50ここでベストアンサー

ポイント500pt

こんな感じになります。

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
他9件のコメントを見る
id:a-kuma3

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

2014/12/04 18:00:23
id: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 を実行するように書いてます。

2014/12/05 10:37:52

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません