• 締切済み

VBSバックアップ

バックアップスクリプト(VBS)について教えて下さい。 単純にディレクトリをバックアップするスクリプトは、出来たのですが これに付加機能を与えたいです。 ◆世代管理をしたい。 ◆iniファイルから、バックアップ元と先、管理する世代等の情報を読み込みたい。 <bkup.vbs> Option Explicit Const ForReading = 1 '読み込み Const ForWriting = 2 '書きこみ(上書きモード) Const ForAppending = 8 '書きこみ(追記モード) Dim objFileSys Dim objShell Dim strCopyFrom Dim strCopyTo Dim strToDir Dim strNewDate WScript.echo "バックアップを開始します" Set objFileSys = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") strNewDate = Year(Now) & _ Right(("0" & CStr(Month(Now)+0)),2) & _ Right(("0" & CStr(Day(Now)+0)),2) strCopyFrom = "C:\vbs" strToDir = "C:\backup" strCopyTo = objFileSys.BuildPath(strToDir,strNewDate) If objFileSys.FolderExists(strCopyTo) = True then WScript.echo "指定のパスには既にディレクトリが存在する為、" & _"バックアップ処理を中断します。" WScript.Quit Else objFileSys.CopyFolder strCopyFrom,strCopyTo WScript.echo "バックアップ処理は正常に完了しました。" End If Set objFileSys = Nothing Set objShell = Nothing 宜しくお願い致します。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

VBScript でini ファイルを扱う機能は用意されていないです。 (多分レジストリを使えということでしょう^^;) なので、自分で機能を実装しないといけないですが、 http://winofsql.jp/VA003334/vbsguide060101070259.htm にそのようなサンプル(ini ファイルを扱うAPIをスクリプトで実装したもの)がありました。 トレンド的には、ini ファイルよりXML ファイルでデータを持つのがいいのかもしれません。 XML の処理は、VBScript からActiveX を使って簡単に使えます。

polalis
質問者

お礼

BLUEPIXY様、マルチな方なんですね^^ アドバイスありがとうございます。 どおりで、調べても凡例がないわけですよね。。。 XMLファイルからの読み込みですね!解りました、 早速そっちで調べてみます。 ありがとうございました。

関連するQ&A

  • VBS でDOSのNet useについて

    VBS内で DOSコマンドの net use * /delete を実行すると 必ずNで実行結果となってしまいます DOS窓ではキーボードでyをいれればいいのですがこの「y」をVBSで渡す方法が見つかりません。 いろいろ試しているのですが・・・どうにもうまくいきません。 OSはWindows7です -----------作成例 ある程度まではできたのですが  Dim objShell Dim wExec Dim sCmd0 Dim sCmd1,sCmd2,sCmd3 ' コマンド生成 sCmd0 = "net use" sCmd1 = "net use * /delete" sCom2 = "net use /persistent:yes" sCmd3 = "net use X: \\PC\skyhd108" ' objのセット Set objShell = CreateObject("WScript.Shell") ' コマンド実行 Set wExec = objshell.Exec("%ComSpec% /c " & sCmd1) Set wExec = objshell.Exec("%ComSpec% /c " & sCmd3) Set wExec = objshell.Exec("%ComSpec% /c " & sCmd2) Set wExec = objshell.Exec("%ComSpec% /c " & sCmd0) Do While wExec.Status = 0 Loop Result = wExec.StdOut.ReadAll MsgBox Result WScript.Echo "お疲れ様でした!" Set wExec = Nothing Set objShell = Nothing

  • VBS

    VBSであるファイルを1行ずつ読み込み、その読み込んだ値を ある別のファイルにリダイレクトしたいのですが、 どのように書けばよいか教えてください。 下記のように、echoでは出すことができるのですが、 ファイルにリダイレクトというのができません。 よろしくお願いします。 ==== sample shell ========================= Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.OpenTextFile("d:\dr1.txt") If Err.Number = 0 Then Do While objFile.AtEndOfStream <> True WScript.Echo objFile.ReadLine Loop objFile.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing ============================================================

  • VBSでデータベースへの接続

    dbon.cfgファイルにSQL Serverへ接続のためのパラメータを設定しておき、それを読み込んでデータベースに接続しようとしていますが接続できません。 dbcon.cfgの中身は下記になっており、]以降のサーバー名、データーベース名を切り出すため、splitを指定しています。 値がわたっていないと思って、ループに"WScript.Echo strDBParm(intCnt)"を指定して中身を確認しようとしましたが、何も表示されません。 お手数をおかけしますがご教示いただけますようお願いいたします。 ----------------------------------------------- [server] サーバー名を指定 [database] データベース名を指定 [uid] [database]で指定したデーターベースに接続できるユーザ名を指定 [pwd] [uid]で指定したユーザーのパスワードを指定 ----------------------------------------------- -------------------------- [VBSスクリプト] Option Explicit Dim objFS Dim objFile Dim objADO Dim strDBParm(3) Dim intCnt Const strDBConCfg="C:\test\dbcon.cfg" Const ForReading = 1 Const TextCompare = 1 intCnt = 0 On Error Resume Next Set objFS = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number <> 0 Then WScript.Echo "FSオブジェクトが作成できませんでした" WScript.Quit(1) End If Set objFile = objFS.OpenTextFile(strDBConCfg,ForReading) If Err.Number <> 0 Then WScript.Echo strDBConCfg & "を開く事ができませんでした" WScript.Quit(1) End If Do Until objFile.AtEndOfLine = True strDBParm(intCnt) = Split(objFile.ReadLine, "]", TextCompare) WScript.Echo strDBParm(intCnt) intCnt = intCnt + 1 Loop Set objADO = CreateObject("ADODB.Connection") If Err.Number <> 0 Then WScript.Echo "ADOオブジェクトが作成できませんでした" WScript.Quit(1) End If objADO.Open "Driver={SQL Server};" & _ "server=strDBParm(0); database=strDBParm(1); uid=strDBParm(2); pwd=strDBParm(3);" If Err.Number <> 0 Then WScript.Echo "サーバーに接続できませんでした" WScript.Quit(1) End If objADO.Close Set objFS = Nothing Set objADO = Nothing

  • 削除が実行されない

    以下の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

  • VBSで動画ファイルの時間を読み取る方法

    複数の動画ファイルをD&Dして、ファイル名に更新時間と動画時間(動画ファイルのプロパティのビデオの欄に表示される「長さ」という項目) をファイル名に追加するプログラムを書きたいと考えています。 更新時間を書き込む方法は http://www.vector.co.jp/soft/winnt/util/se501476.html のvbsを参考に作ることができました。 動画時間の読み取りに関しては http://q.hatena.ne.jp/1312251379 に書かれてあるのですが、うまくいきません。 ExtendedPropertyのところで、 オブジェクトでサポートされていないプロパティまたはメソッドです。 というエラーが出て実行することができません。 以下が、作りかけですが、作成したプログラムです。 WScript.Echo "Duration : [" & CStr(objFile.ExtendedProperty2("Duration")) & "]" ' 単位は 100ns のところをどのように書き換えれば良いか教えていただけないでしょうか? Dim stArrayData Dim objParam Set objParam = WScript.Arguments 'D&Dでの読み込みを可能にする Dim objFs Set objFs = WScript.CreateObject("Scripting.FileSystemObject") ' 引数の全ファイルについてファイル名を変更する Dim objFile Dim dtLastModified Dim strLastModified Dim i Const FMTID_AudioSummaryInformation = "{64440490-4C8B-11D1-8B70-080036B11A03}" For i = 0 To objParam.Count - 1 If objFs.FileExists(objParam(i)) Then Set objFile = objFs.GetFile(objParam(i)) ' DateLastModifiedのフォーマットが環境によって違うかもしれないので ' いったんDate型にする dtLastModified = CDate(objFile.DateLastModified) If Hour(dtLastModified) < 10 Then strLastModified = strLastModified & "0" End If strLastModified = strLastModified & Hour(dtLastModified) If Minute(dtLastModified) < 10 Then strLastModified = strLastModified & "0" End If strLastModified = strLastModified & Minute(dtLastModified) ' ファイル名を設定 stArrayData = split(objFile.Name, ".") objFile.Name = stArrayData(0) & "-" & strLastModified & "." & stArrayData(1) WScript.Echo "FileName : [" & objFile.Name & "]" WScript.Echo "Duration : [" & CStr(objFile.ExtendedProperty2("Duration")) & "]" ' 単位は 100ns WScript.Echo "FMTID_AudioSummaryInformation,3 : [" & CStr(objFile.ExtendedProperty(FMTID_AudioSummaryInformation & " 3") ) & "]" ' 単位は 100ns Set objFile = Nothing End If Next Set objFs = Nothing Set objParam = Nothing

  • VBSでファイルの自動保存

    vbs初心者です。自分なりに調べたのですが、うまくいかず、アドバスを願い致します。目的は、ファイルを自動保存したいのです。 以下のように記載して、最後にカレントデレクトリイに「test.txt」と名前をつけて保存させたいのです。よろしくお願い致します。 Set objShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 1000 objShell.Run "notepad.exe" objShell.SendKeys "hello "  objShell.SendKeys "%{F4}" objShell.SendKeys "%y"  

  • display.vbsというファイルがstartupフォルダにあるので

    display.vbsというファイルがstartupフォルダにあるのですが? display.vbsというファイルがすべてのプログラムのstartupフォルダにあるのですが、これは何でしょうか?名前からして気持ち悪いので正体を知っている人がいたら教えて欲しいです。 メモ帳で開いたら下記のようなソースになっていました。 よろしくお願いします。 -------------------------------------------- ' Self destructive VBScript for changing optimal resolution ' Set optimal resolution Set objShell = Wscript.CreateObject("Wscript.Shell") objShell.Run "c:\windows\options\cfgdisp.exe /optimum", 7, True ' Now destroy itself Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFile("C:\Documents and Settings\All Users\Start Menu\Programs\Startup\display.vbs") --------------------------------------------

  • VBSを使用したSQLCMDからのQuit

    VBSを使用してSQLCMDを実行してデータベースに接続できることを確認しましたが、 データベースの切断ができません。 SQLCMDユーティリティに制御が移ってしまっているため、VBSのシェルオブジェクトを使用して切断できないのではと考えております。 ADOを使用すれば、いいのは分かっているのですが、実際の環境ではADOを使用したデータベースへの接続が安定しないため、SQLCMDで接続する方法でスクリプトを作成しました。 何かいい方法がありましたら、ご教示頂けますでしょうか。 Option Explicit '■ オブジェクトの宣言 Dim objFSO Dim objFile Dim objWShell '■ 変数の宣言 Dim strBuf Dim strSearch Dim IngPos Dim IngCnt Dim idx Dim Param(3) Dim Hit Dim HitCnt Dim DBConCmd Dim DisConCmd '■ 定数の宣言 '// データベースコンフィグファイル格納フォルダ Const strDBConfigFolder = "c:\DBConfig" '// データベースコンフィグファイル Const strDBConfigFile = "c:\DBConfig\SQLCMDDBCon.cfg" '// 検索開始位置(1文字目) Const IngStart = 1 '// テキストモードで比較 Const IngTextCmp = 1 On Error Resume Next '□ FSOオブジェクトの作成 Set objFSO = CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then '□ データベースコンフィグファイル格納フォルダの存在チェック If objFSO.FolderExists(strDBConfigFolder) Then WScript.Echo "データベースコンフィグファイルを格納フォルダが存在します" '□ データベースコンフィグファイルの存在チェック If objFSO.FileExists(strDBConfigFile) Then WScript.Echo "データベースコンフィグファイルが存在します" '□ データベースコンフィグファイルの読み込み Set objFile = objFSO.OpenTextFile(strDBConfigFile, 1) '□ データベースコンフィグファイル読み取りチェック If Err.Number = 0 Then WScript.Echo "データベースコンフィグファイルが読み取りできます" '□ ディレクティブをセット strSearch = Array("<server_name>", "<login_id>", "<password>") '□ ヒットカウントの初期化 HitCnt = 0 Do Until objFile.AtEndOfLine = True '□ 1行読み込み、バッファに格納 strBuf = objFile.ReadLine '□ インデックスの初期化 idx = 0 '□ ヒットフラグの初期化 Hit = 0 '□ ディレクティブヒット判定用の初期化 IngPos = 0 Do Until idx > 2 or Hit = 1 IngPos = Instr(IngStart, strBuf, strSearch(idx), IngTextCmp) If IngPos = 0 Then WScript.Echo strSearch(idx) & "が見つかりません" idx = idx + 1 Else WScript.Echo strSearch(idx) & "が見つかりました" IngCnt = Len(strSearch(idx)) Param(idx) = Mid (strBuf, IngCnt + 1) Hit = 1 HitCnt = HitCnt + 1 End If Loop Loop Else WScript.Echo "データベースコンフィグファイルが読み取りできまないため、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "データベースコンフィグファイルが存在しないため、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "データベースコンフィグファイルを格納フォルダが存在しないため、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "FSOオブジェクトが作成できないため、処理を終了します" WScript.Quit(1) End If '□ Shellオブジェクトの作成 Set objWShell = WScript.CreateObject("WScript.Shell") If Err.Number = 0 Then DBConCmd = "sqlcmd -S " & Param(0) & " -U " & Param(1) & " -P " & Param(2) objWShell.run DBConCmd If Err.Number = 0 Then WScript.Echo "データベースサーバーに接続しました" Else WScript.Echo "データベースサーバーに接続できませんでしたので、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "Shellオブジェクトが作成できないため、処理を終了します" WScript.Quit(1) End If DBDisConCmd = "exit" objWShell.run DBDisConCmd '□ オブジェクトのクローズ objFile.Close '□ オブジェクトの開放 Set objShell = Nothing Set objFSO = Nothing

  • VBSでとある条件の時に処理をやらずに終了させる方法

    VBSでとある条件の時に処理をやらずに終了させる方法で悩んでいます。 Dim ObjIE Dim ObjShell Dim ObjWindow Dim WinExist WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then WinExist = True Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If ・ ・ ・ ・ 例えばこのように起動しているIEを探します そこでもしYahoo!JAPANが起動していたら以降の処理をやらずに終わらせたいのですが・・・ どのような記述にすればよいでしょうか?

  • ipconfig /all を環境変数へ代入方法

    http://d.hatena.ne.jp/necoyama3/20081218/1229604217 にて、ipconfigコマンドを実行して標準出力を取得する方法があり、下記VBSで きちんと動くのですが、 ------------------------------- Dim objShell Dim wExec Dim sCmd Set objShell = CreateObject("WScript.Shell") ' コマンド生成 sCmd = "ipconfig" ' コマンド実行 Set wExec = objShell.Exec("%ComSpec% /c " & sCmd) Do While wExec.Status = 0 Loop Result = wExec.StdOut.ReadAll MsgBox Result Set wExec = Nothing Set objShell = Nothing ----------------------------------- sCmdを下記に差し替えると、動かなくなります。 sCmd = "ipconfig /all" もしくは sCmd = "systeminfo" これらコマンドに差し替えてもVBSを動かす方法は ありますでしょうか。 直接、コマンドラインで ipconfig /all や systeminfoを入力する場合は きちんと出力されます。

専門家に質問してみよう