VBScriptでCurrentDirectoryを変更する方法

このQ&Aのポイント
  • VBScriptを使用して、CurrentDirectoryを変更する方法について説明します。
  • VBScriptのスクリプトを実行する際に、相対パスでファイルを指定する方法について考えます。
  • VBScriptでのCurrentDirectoryの変更方法には、コマンドプロンプトを使用する方法などがあります。
回答を見る
  • ベストアンサー

VBScriptでCurrentDirectoryを変更する方法

もともとのやりたいことは実行したスクリプトの相対パスでファイルを指定することです。 (スクリプトは複数の実行環境で実行するので絶対パスでは書きたくありません) ただし、ダブルクリックでも起動するし、別ファイルのD&Dでも起動するので 必然的に起動時のCurrentDirectoryが変化してしまいます。 これを固定化したいのです。 いまは固定化というか起動後に目的のディレクトリに移動することで実現させようと思っています。 とりあえず以下のコードを書きました。 Dim CurrentDirectory CurrentDirectory = Left(WScript.ScriptFullName, Len(WScript.ScriptFullName) -21) Dim oShell Set oShell = WScript.CreateObject ("WSCript.shell") oShell.run "cmd CD " + CurrentDirectory, 0, FALSE Set oShell = Nothing (2行目の「-21」はスクリプト名の長さを引いているだけです。あまり気にしないでください) が、これだと見た目はうまくいくのですがcmdプロセスが残ってしまい起動するたびに増えていきます。 それにそもそもスマートではない気がします 質問は以下です。 ・上記のコードを修正してcmdプロセスを残らないようにする方法 ・上記の方法以外でCurrentDirectoryを変更する方法 どちらでもかまいません。(両方だとなおうれしいです) よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nas02
  • ベストアンサー率70% (22/31)
回答No.1

こんにちは。 提示されたスクリプト中の oShell.run "cmd CD " + CurrentDirectory, 0, FALSE を oShell.CurrentDirectory = CurrentDirectory に変更すれば、やりたい事が実現出来ます。 参考URL http://msdn.microsoft.com/ja-jp/library/cc364350.aspx 後、スクリプトのカレントフォルダ取得には以下の方法をよく使ってました。 path = Split(WScript.ScriptFullName,Wscript.ScriptName) CurrentDirectory = path(0) また、以下のマイクロソフトのサイトからWindows Script 5.6 ドキュメントを ダウンロード出来ますので、手元に置いておくと便利です。 http://www.microsoft.com/japan/msdn/scripting/

mibusys
質問者

お礼

おお、すごいです。 へんな苦労をしていたことが馬鹿みたいです。 まだまだ知識や経験が足りないようですね…。 質問自体以外にも意図やスキルを汲み取って アドバイスをしていただき参考になりました。 大変助かりました。ありがとうございました。

関連するQ&A

  • vbs で jar ファイルを起動させたいのにエラーがでる

    VBS で JAR を起動しようとするとエラーがでてしまって起動できなくて困っています。 ** test.vba ** Dim oShell Set oShell = WScript.CreateObject ("WSCript.shell") oShell.run "PLAY.jar",0 Set oShell = Nothing ************ と記述した test.vba をダブルクリックすると Windows Script Host が 「この操作に対して指定されたファイルには、アプリケーションが関連付けられていません。」 というエラーを出します。 2台のマシンで試してみましたがデスクトップはOKでもノートパソコンではNGでした。 そのマシンは WindowsXP Professional IE 6 ですが、2台ともその部分は同じです。 マイコンピュータからフォルダオプションを見たところ拡張子 VBS は ファイルの種類 VBScript Script File に関連付けられているようです。 コマンドラインから java -jar PLAY.jar と入力して実行すると起動できます。 なにが悪いのかさっぱりわかりません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 続・VBscriptでコマンドラインへ発行したい

    以前書き込みさせていただきましたが携帯とPCを使ったため間違ってしまい複数の質問を立ててしまいました。 大変申し訳ありませんでした。最初に立てた二つの書き込みは閉じしっかりまとめたものをここに書かさせていただきます。大変申し訳ありませんでした。 不快な思いさせてしまったことは重々承知しておりますが教えていただけないでしょうか? ≪継続URL≫ http://oshiete1.goo.ne.jp/qa4301789.html http://oshiete1.goo.ne.jp/qa4299107.html まずやりたい動作(仕様?)を見直します。 1.コマンドプロンプトを立ち上げる 2.ディレクトリを変更するためカレントディレクトリする。(何故かこうしないとダメ・・・環境変数の設定が不可みたい?) 3.コマンドラインツールを立ち上げテキストに記述されたコマンドを発行させる。 4.テキストの数だけ実行をさせる。 Option Explicit On Error Resume Next Dim objWshShell ' WshShell オブジェクト Dim strNewFolder ' 移動するフォルダ Dim i Dim strEXE Set objWshShell = WScript.CreateObject("WScript.Shell") If Err.Number = 0 Then strNewFolder = "D:\Test" objWshShell.CurrentDirectory = strNewFolder objWshShell.Exec("cmd.exe").StdOut.ReadAll Else WScript.Echo "エラー: " & Err.Description End If For i = 1 to 15 strCOM = "XXXX.exe @ D:\HEPPOKO" & Right("000" & CStr(i), 4) & ".txt" Set oExec = WshShell.Exec(strCOM) WScript.Sleep(300000) Next Set objWshShell = Nothing

  • cscriptで文字変数 に ” を入力するには

    お世話になります。 早速ですが、質問があります。 c:\test\test.exe -path "D:\data" -file "aaa.txt" -flag a というコマンドをcscript のプログラムから起動したいのですが、コマンド文字列を文字列変数に代入する方法 がありましたら、教えてください。 Cscript test.vbs %1 ======================================= Dim WshShell Dim oExec Dim Cmd Dim File File = WScript.Arguments(0) Cmd = "c:\test\test.exe -path "D:\data" -file "a.out" -flag " & File                     ↑↑↑↑                  これができません? Set WshShell = CreateObject("WScript.Shell") set oExec = WshShell.Exec(Cmd) Do While oExec.Status = 0 Wscript.Sleep 100 Loop "も文字列に入力するには、どのようにすればいいでしょうか? ご意見、アドバイスよろしくお願いいたします。

  • VBSCRIPTでcmd命令(dir)を実行させて

    パスはcsvファイルで読みこんで、vbs上で Set Shell = CreateObject("WScript.Shell") Shell.Run "cmd /C ""dir \¥xxx\xxxxx\xxxxx" を実行させてアクセスできなかったパスがぞんざいするならエラーで返して続いて実行してほしいです。 それで最後にログにエラー情報を書く処理をおこないたいです。問題はcmdだとecho %errorlevel%これを使えば すぐにこげたことを1か0で返してくれますが vbs上でも可能ですか?

  • Vbscriptに詳しいかたがいらっしゃるならぜひ教えてください!

    以下のコードなんですが なぜかwindows2000では何回実行しても 圧縮ファイルができあがりますが windows2003では いつも空のzipファイルが作られてしまいますけど Vbscriptに詳しいかたがいらっしゃるなら ご教授願います。 Dim fso Dim wShell Dim sourceFolderPath Dim sourceFilePath Dim targetFolderPath Dim Shell Dim ie Dim file Dim d Dim sourceFile Dim zipfile Dim zip Dim dFolder Dim ZIPdata:ZIPdata="PK" & Chr(5) & Chr(6) & String(18,0) targetFolderPath="C:\job\VBS\zip\" sourceFilePath ="C:\job\VBS\新しいフォルダ\test1.txt" Set fso=CreateObject("Scripting.FileSystemObject") Set wShell=CreateObject("WScript.Shell") CreateObject("WScript.Shell").Run "explorer.exe",0,True WScript.Sleep 100 Set Shell=CreateObject("Shell.Application") For Each ie In Shell.Windows If Not ie.Busy and ie.ReadyState=4 and InStr(TypeName(ie.Document),"IShellFolderViewDual")=1 Then exit for end if next Set Shell=ie.Document.Application 'set sourceFolder = fso.GetFolder(sourceFolderPath) set sourceFile = fso.GetFile(sourceFilePath) set targetFolder = fso.GetFolder(targetFolderPath) set sourceFile = fso.GetFile(sourceFilePath) d = sourceFile.DateLastModified zipfile=targetFolderPath & "¥" & Year(d) & "-" & Month(d) & "-" & Day(d) & " " & sourceFile.Name & ".zip" fso.CreateTextFile(zipfile).write ZIPdata Set dFolder=Shell.NameSpace(zipfile) Set Folder=Shell.NameSpace(sourceFile.ParentFolder.Path) Set FolderItem=Folder.ParseName(sourceFile.Name) dFolder.CopyHere FolderItem,&H10

  • 削除が実行されない

    以下のvbsを実行しても rmdir が実行されません どうしたらよいでしょうか Dim objShell Dim wExec Dim strResult Set objShell = CreateObject("WScript.Shell") objShell.CurrentDirectory = "C:\Users\xxx\Desktop\test" objShell.Exec ("cmd /c dir 201406* /b/ad/s >> ログ.txt") Set wExec = objShell.Exec ("cmd /c for /R %d in (201406*) do rmdir /S /Q ""%d""") Set wExec = Nothing Set objShell = Nothing

  • エラー この変数は宣言されていません'WScript'

    こんばんは。HTMLやjavascriptは初心者ですが、よろしくお願いします。まず、こちらをご覧ください。 <HTML> <HEAD> <TITLE>Menu</TITLE> <SCRIPT LANGUAGE="VBScript"> <!-- Option Explicit Public fso, indexPageTS, i Sub Start(ByRef i) Dim rootFolder, rootPath Set fso = CreateObject("Scripting.FileSystemObject") Set rootFolder = fso.GetParentFolderName(WScript.ScriptFullName) alert rootFolder.Name Set indexPageTS = fso.CreateTextFile(fso.BuildPath(rootFolder.Path, "index.html"), True) このように、<HEAD>にサブプロシージャを記述しております。少し中略します。<BODY>に以下のボタンを置きます。 <input type="button" name="InputBtn" onclick="Start(1)" value="リンクの更新"> これを押すとエラーになってしまいました。 IEでは「ページでエラーが発生しました」、htaEditというソフトで実行すると表題に掲げたエラーが出ました。6行目の、 Set rootFolder = fso.GetParentFolderName(WScript.ScriptFullName) のところをfso.GetFolderで手書きのパスを指定したらうまくいっていたので、'WScript'の使い方がいけないのかなとも思いましたが、VBSファイルにして実行すると問題ありませんでした。 htmlページのボタンではWScript.ScriptFullNameは使えないのでしょうか? IEのヴァージョンは少し古めで、5か6ですが、問題ありますでしょうか? よろしくお願いします。

    • ベストアンサー
    • HTML
  • VBscriptからIE11起動

    windows7(x64) IE11 IEを起動するスクリプトを.vbs作成しました。 vbsファイルをダブルクリックすると、↓エラーが発生するときがあります。 「 WScript.CreateObject: "InternetExplorer.Application" というオブジェクトを作成 できませんでした。」 ↓SRCです。 Dim IE Set IE = WScript.CreateObject("InternetExplorer.Application", "Event_") IE.Visible = True IE.Navigate ("http://www.yahoo.co.jp") set IE = nothing 数秒待ったり、vbsを連打すると起動します。 プロパティ(vbs右クリック)のスクリプトタブで実行時間を10秒にしてみても起動できないことがあります。 オブジェクトを作成しない方法はありますか? また、失敗している原因はなんでしょう?

  • コマンドプロンプトの出力をVBScript内の変数に代入する

    VBScriptからコマンドプロンプトのver | findstr 5.1を実行し、その出力結果をVBScript内の変数に代入したいのですが、どうすればいいでしょうか? Dim WShell Dim result Set WShell = WScript.CreateObject("WScript.Shell") WShell.Run "cmd /c (ver | findstr XP > " & result & ")" MsgBox result とやってもresultには何も入っていませんでした。

  • VBScript

    下記、プログラムを実行すると、コマンドプロンプトの画面が 消えずに、そのまま残ってしまいます。 どうしたら、画面を消すことができるでしょうか。 お力添えをお願いいたします。 Set WshShell = Wscript.CreateObject("WScript.Shell") Set WshEnv = WshShell.Environment("user") WshEnv("C:\NET\aaa.txt") = "administrator" Wshshell.Run("cmd.exe") WScript.Sleep(500) WshShell.SendKeys("runas /user:administrator " + chr(34) + "xcopy D:\NET\aaa.txt C:\NET\aaa.txt" + chr(34)) WshShell.SendKeys("{Enter}") WScript.Sleep(500) WshShell.AppActivate "C:\WINDOWS\system32\runas.exe" WshShell.SendKeys("XXXXX") WshShell.SendKeys("{Enter}") WScript.Sleep(500)

専門家に質問してみよう