• ベストアンサー

vbsファイルにてaiueo.batを昨日の日付にて実行する方法について

vbsファイルにてaiueo.batを昨日の日付(2007 01 27)にて実行するため 下記のようなスクリプトファイルを作成しましたが、 最終行にてエラーにより処理が止まってしまいます。 置換の部分の処理にてエラーが発生しているのはわかっているのですが、 どのように修正を加えればよいのかがわかりません。 ご教授のほど、よろしくお願いします。 ----------------------------------------------------- Option Explicit Dim strValue ' 変換する文字列 Dim strBefore ' 変換前の文字列 Dim strAfter ' 変換後の文字列 strValue = Date() strBefore = "/" strAfter = " " Set wShell = CreateObject("WScript.Shell") Set oExecute = wShell.Exec(aiueo.bat Replace(Date() -1, strBefore, strAfter)) -----------------------------------------------------

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

No.1です。 aiueo.batの中では、引数をどのように処理しているのでしょうか。 aiueo.bat yyyy mm dd と引数を3つ渡して、バッチ内では%1,%2,%3で受け取っているのならうまくいくはずなのですが、コマンドプロンプトから直接上記コマンドを実行してうまくいくでしょうか。 もしaiueo.batの中で引数全体が1つとして扱われるのであれば、No.2の方の回答のように、"yyyy mm dd"となるようにする必要があります。 その辺の整合性がとれているか、確認してみてはいかがでしょうか。

it2008
質問者

お礼

ようやく原因がわかりました。 aiueo.bat と replace の間に" "が必要でした。 Set oExecute = wShell.Exec("aiueo.bat" & " " & Replace(Date() -1, strBefore, strAfter )) どうもありがとうございました。

it2008
質問者

補足

ご回答ありがとうございます。 >と引数を3つ渡して、バッチ内では%1,%2,%3で受け取っているのならうまくいくはずなのですが、 バッチ内では%1,%2,%3を受け取っております。 実際に直接コマンドを実行してうまくいきます。 教えて頂いたスクリプトを実行すると、 エラー 指定されたファイルが見つかりません。 とでて、下記行が指定されます。 Set oExecute = wShell.Exec("aiueo.bat" & Replace(Date() -1, strBefore, strAfter)) 原因が全く持って不明です。。

その他の回答 (2)

回答No.2

自信ないです。外してたらごめんなさい。 コマンドライン引数は空白で区切られる性質があった気がします。 なので、空白を含むyyyy mm ddのような場合には、 "で囲む必要があるような。。。 試してないのでわかりませんが、次のコードはどうでしょう? ("と"の間で、""を入れると一文字の"として利用されます。) Set oExecute = wShell.Exec("aiueo.bat """ & Replace(Date() -1, strBefore, strAfter) & """")

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

Set oExecute = wShell.Exec(aiueo.bat Replace(Date() -1, strBefore, strAfter)) でなくて、 Set oExecute = wShell.Exec("aiueo.bat " & Replace(Date() -1, strBefore, strAfter)) ではないでしょうか。

it2008
質問者

補足

ご回答ありがとうございます。 教えて頂いた方法にて実行しました。 エラーは発生しませんでしたが、上記構文では"yyyy mm dd"という形式にでaiueo.batを実行しているように見受けられませんでした。 昨日の日付をyyyy mm ddにて取得、 --------------------- aiueo.bat yyyy mm dd --------------------- という形で実行したいのですが、 バッチファイルとVBSを利用して ほかに解決する方法がございましたら教えて頂けないでしょうか? よろしくお願いします。

関連するQ&A

  • BAT+VBSでのファイルZIP化処理が終わらない

    Win7・Win2008環境にて、Windowsバッチ(.bat)から、 引数に対象フォルダ・ZIPファイル作成場所を受け取って フォルダのZIP化を行うVBSスクリプトを作成しています。 下記のスクリプトをsample.vbsで作成しsample.batから実行すると ファイルがZIPファイル内に格納されておりません。(空のZIPファイル) そのため、「★★★」箇所の排他処理の関数を呼び出すようにすると ファイルがZIPファイル内に格納されるようになりましたが、 処理がいつまでも完了しません。 (コマンドプロンプトから直接コマンドライン実行すると正常終了します。) 何か間違ってますでしょうか?(そもそもフォルダのZIP化手順も含め) ご教授ほどよろしくお願い致します。 ■sample.vbs ※okwave用インデントのために全角スペース使用 ' ******************************************************* ' オブジェクト定義 ' ******************************************************* Dim fso Dim subf Dim FileName    ' ファイル名 Dim ArgDam     ' 遡り日数 Dim DifDam     ' 遡り日数との差 Dim FDate      ' ファイル作成日 Dim strTargetFolder ' ZIPファイル作成フォルダ Dim m_objShell Set m_objShell = CreateObject("Shell.Application") Set fso = CreateObject("Scripting.FileSystemObject") intOutRet = 0 ' 引数の取得********************************************* ' 引数/ZIP化対象フォルダ情報を取得 Set subf = fso.GetFolder(WScript.Arguments(0)) ' 引数/ZIPファイルの情報を取得 strTargetFolder = WScript.Arguments(1) ' ZIP化処理********************************************** If CreateZipfile(subf, strTargetFolder) = false Then   intOutRet = 1 End If ' オブジェクト開放 Set fso = Nothing WScript.Quit intOutRet ' ZIPファイルの作成************************************** Private Function CreateZipfile(subf, strTargetFolder)   Dim intFileCnt   Dim idx   On Error Resume Next   intFileCnt = 0   For Each FileName In subf.Files     intFileCnt = intFileCnt + 1   Next   'intFileCnt = intFileCnt - 1   idx = 0   Dim intNumbers() '動的配列を宣言   ReDim intNumbers(intFileCnt)   For Each FileName In subf.Files     intNumbers(idx) = FileName     idx = idx + 1   Next   '書庫ファイル作成   fso.CreateTextFile(strTargetFolder, False).Write "PK" & Chr(5) & Chr(6) & String(18, 0)   '書庫オブジェクト取得   Set l_objZIP = m_objShell.NameSpace(CStr(strTargetFolder))   '圧縮対象ファイルを取得   For Each l_strItem In intNumbers     '書庫に追加     l_objZIP.CopyHere l_strItem     '書庫が排他状態で開けるまで、処理継続・・・・・・・・★★★     Do Until IsNoOpen(l_strItem)     Loop   Next   ' 正常終了   CreateZipfile = True   exit function   On Error Goto 0   ' 異常終了   CreateZipfile = false End Function '排他チェック******************************************** Private Function IsNoOpen(p_strFileName)   'エラー無視   On Error Resume Next   WScript.Sleep 100   'ファイルを追加モードで開く/閉じる   Call fso.OpenTextFile(p_strFileName, 8, false).Close   IsNoOpen = CBool((Err.Number = 0)) End Function ■sample.bat F:\BAT\sample.vbs "F:\LOG" "F:\LOG\sample.zip" exit

  • vbscriptを用いて他のVBSファイルを実行

    プログラム ---------------------------------------------------------------- option explicit dim objwshell set objwshell = createobject("wscript.shell") objwshell.run "ファイルのフルパス", 1, false set objwshell = nothing --------------------------------------------------------------- その「ファイルのフルパス」上に「notepad.exe」と入力するとメモ帳が起動するんですけど、他のファイル(vbs、jsなど)を指定するとエラーが出ます。 もしかしてこれは拡張子が「.exe」のファイルだけしか起動できないのでしょうか? ちなみに上のファイルを保存するときの拡張子は「.vbs」です。

  • VBSファイルをスタートアップフォルダに入れておいて、

    エクセル2007の特定ファイルをそのVBSファイルにより自動起動させる方法を教えてください。ちなみに、次のようなVBSファイルを作成しましたがエラーとなってしまいます。 Option Explicit 'オブジェクト変数の宣言とWshShellオブジェクトの作成。 Dim objWshShell Set objWshShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 1000 '1秒待機 objWshShell.Run "C:¥Program Files¥Microsoft Office¥Office12¥EXCEL.exe" です。

  • .batファイルが実行できません[VB2005]

    お世話になってます。 VB2005にて、.batファイルの中身を書換え、他アプリケーションを 実行する処理を行っています。 しかし.batの書換えは正確に行われているのですが .bat実行中プロンプト内に出力されたテキストと異なる文字列が入っており 処理が完了しませんでした。 正しく処理するにはどのようにしたらよろしいでしょうか。 コードは下記の通りです。 'BATCHファイルの書換え処理 Dim Bat_f As New System.IO.StreamWriter(Cur_dir + "LT-AutoP1.BAT", False, System.Text.Encoding.Default) For Each line As String In ListBox1.Items Bat_f.WriteLine("CALL ACLT " + line + " /b AutoP.scr") Next Bat_f.Close() Dim psInfo As New ProcessStartInfo() psInfo.FileName = "C:\Program Files\AutoCAD LT 2002\LT-AutoP1.BAT" ' 実行するファイル psInfo.CreateNoWindow = False psInfo.UseShellExecute = False Process.Start(psInfo) 尚、正確に出力された.BATを直接ダブルクリックすると正常に処理されます。 CALL ACLT Z:\hoge\hoge1\hogehoge.dwg /b AutoP.scr コマンド実行中は下記のように表示されていました Z:\hoge\hoge1\>CALL ACLT Z:\hoge\hoge1\hogehoge.dwg /b AutoP.scr 'ACLT'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません

  • VBSからリモートでbat実行(WMI)

    VBS初心者です。 別端末上のbatファイルを別ユーザでリモート実行したいのですが、 以下のソースでエラーが起きてしまいます。(result が2で返ってきてしまう) どなたか原因がお解りになりましたらご教授宜しくお願い致します。 ----------------------------------------------------- RemoteExecute "リモート先","ドメイン\User","pass","C:\test.bat" Function RemoteExecute(strServer, strUser, strPassword, CmdLine) Const Impersonate = 3 RemoteExecute = -1 Set Locator = CreateObject("WbemScripting.SWbemLocator") Set Service = Locator.ConnectServer(strServer, "root\cimv2", strUser, strPassword) Service.Security_.ImpersonationLevel = Impersonate Set Process = Service.Get("Win32_Process") result = Process.Create(CmdLine, , , ProcessId) If (result <> 0) Then WScript.Echo "Creating Remote Process Failed: " & result Wscript.Quit End If RemoteExecute = ProcessId End Function -----------------------------------------------------

  • Excel VBAでbatファイルを実行

    ExcelのVBAでbatファイルを実行し、 batファイル内でセットした環境変数を取得することは可能でしょうか? batファイルの内容は set MYDRIVE=E: set MYDIR=%MYDRIVE%\WORK のような感じです。 環境変数「MYDIR」の値をVBA側で取得できないかと思い、 ' 参照設定: Windows Script Host Object Model Sub ボタン1_Click() Dim myWshShell As New WshShell Dim myLong As Long Dim myWshEnvironment1 As WshEnvironment Dim myWshEnvironment2 As WshEnvironment Dim myWshEnvironment3 As WshEnvironment Dim myWshEnvironment4 As WshEnvironment myLong = myWshShell.Run("E:\work\test.bat") Set myWshEnvironment1 = myWshShell.Environment("System") Set myWshEnvironment2 = myWshShell.Environment("User") Set myWshEnvironment3 = myWshShell.Environment("Volatile") Set myWshEnvironment4 = myWshShell.Environment("Process") ' ブレークポイントを設定して内容確認 Set myWshShell = Nothing Set myWshEnvironment1 = Nothing Set myWshEnvironment2 = Nothing Set myWshEnvironment3 = Nothing Set myWshEnvironment4 = Nothing End Sub のようなコードを書いてみて「myWshEnvironment1」~「myWshEnvironment4」の内容を ウォッチ式で確認してみましたが、batファイルの中でセットした「MYDIR」の値は 含まれておりませんでした。 batファイルで設定した環境変数の値を取得する方法があれば 教えていただけないでしょうか?

  • VBSでバッチを実行できません。

    C:\temp\test.batをVBSで実行しようとするのですが、 何度やっても実行されません。 想像ですが、c:\WINNT\System32\cmd.exeが動いている ようなのですが、肝心のC:\temp\test.batが動きません。 以下のように記述しました。 Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run ("cmd /c c:\temp\test,0,True") WIN2K、IE6.0の環境です。 どこか記述に誤りでもあるのでしょうか? どうぞよろしくお願いいたします。

  • VBSでファイル作成後、書き込みできない

    ファイルが存在している場合は、ファイルをオープンして書き込み、ファイルが存在していない場合は、ファイルを作成後、オープンして書き込みを行わせたいと考えています。 しかし、ファイルが存在していないとき、ファイルは作成されるのですが、『エラー:800A0046 書き込みできません。VBScript実行時エラー』が出て、書き込みができません。モードをWritingにしても同じでした。 お手数をおかけしますが、ご教示いただけますようお願いいたします。 Option Explicit '■ オブジェクトの宣言 Dim objFSO Dim objFile '■ 定数の宣言 Const strFileName = "C:\VBS\TEST.TXT" '■ 定数の宣言 '// ファイル入出力モード(8:追加書き込み) Const ForAppending = 8 Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else WScript.Echo "ファイルが見つかりませんでした" Set objFile = objFSO.CreateTextFile(strFileName) If IsObject(objFile) Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If '// ファイルのオープン Set objFile = objFSO.OpenTextFile(strFileName,ForAppending) objFile.WriteLine "2012/12/21,100,ブレーキパッド,35000"

  • batファイルの実行について

    batファイルを作成しました。 (ATコマンドにてスケジュールさせたいと考えてます。) ファイル自体をダブルクリックで実行すると正常に処理が完了しますが、コマンドプロンプトから実行しようとすると以下のエラーが発生します。 〓〓〓〓〓〓〓〓〓〓〓〓 C:\>cmd /c "E:\MirroringTool\SimpleFolderMirror\test.bat" 指定した名前は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されません。 〓〓〓〓〓〓〓〓〓〓〓〓 実行させたいbatファイルは以下のとおりです。 〓〓〓〓〓〓〓〓〓〓〓〓 echo off cls rem ↓SimpleFolderMirror.exeを解凍したフォルダ SET EXEFOLDER_PATH="E:\MirroringTool\SimpleFolderMirror\" rem ↓ログの出力フォルダ・ファイル SET LOG_DIR="E:\MirroringTool\SimpleFolderMirror\logs\" rem ↓ミラー元フォルダ1 SET COPY_FROM_PATH_01="S:\" rem ↓ミラー先フォルダ1 SET COPY_TO_PATH_01="E:\ORANT\OWS" cd %EXEFOLDER_PATH% SimpleFolderMirror.exe %COPY_FROM_PATH_01% %COPY_TO_PATH_01% > %LOG_DIR%logs.txt 〓〓〓〓〓〓〓〓〓〓〓〓 cd %EXEFOLDER_PATH%のところまでは処理は完了しているようなので、最後の行のところで発生しているようです。 何が原因でエラーが発生してしまっているのでしょうか? 宜しくお願い致します

  • vbsでテキストファイル内の文字列検索

    初心者です。 テキストファイルを指定し、含まれる文字列を検索し、 結果表示したいと考えております。 色々探して、以下で作成したのですが、 うまく動いてくれません。 出来ましたら、テキストファイルの中の文字列の 一部分を指定して動作させたいと思っております。 どなたかご教示のほど宜しくお願い致します。 ---------------------------------------------------- Set WSHFso = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") Dim strSearchWord Set tmpFile = WSHFso.OpenTextFile("C:\AAA.txt") Do Until tmpFile.AtEndOfStream tmpLine = tmpFile.ReadLine strSearchWord = strSearchWord & tmpLine & vbcrlf Loop Dim SearchWord SearchWord = split(strSearchWord," ") if InStr(SearchWord(ix), "test")<>0 then WScript.Echo " testを含みます。" else WScript.Echo " testを含みません。" end if ----------------------------------------------------