3

まだ作業中のBATCHファイルを変換しようとしています(Robocopyでの質問 | ソースの親フォルダーを含むミラー先)。

VB に移行した理由は、バックアップしたいフォルダを参照するようにユーザーに求めるダイアログ ボックスを追加するなど、もう少し機能を追加するためです...

現在私が持っているコード (元の .bat ファイルから部分的にのみ変換されています)。

Dim Command1

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Example", 1, "c:\Programs")
If objFolder Is Nothing Then
    Wscript.Quit
End If
wscript.Echo "folder: " & objFolder.title & " Path: " & objFolder.self.path

sCmd = "%windir%\System32\Robocopy.exe "
sDate = Day(Now) & "-" & Month(Now) & "-" & Year(Now)
sTime = Hour(Now) & "-" & Minute(Now) & "-" & Second(Now)
sSource = objFolder & " "
sDestination = "Backups\"& Year(Now) &"\"& Month(Now) &"\"& Day(Now) &"\ "
sLogDir = "Backups\Logs\"& Year(Now) &"\"& Month(Now) &"\"& Day(Now) &"\ "
sSwitches = "/SEC /E /Log:"& sTime &".txt"

Set objShell = CreateObject("Wscript.Shell")
objShell.Run(sCmd & sSource & sDestination & sSwitches)

私の問題は、これがログファイルによると起こることです。

Source = G:\test\delete\
Dest = G:\test\Backups\2013\10\23\

一方、真のソースは次のとおりです。

C:\Users\User\Desktop\delete

だから私が理解しようとしているのは、.vbsが実行されているフォルダである「G:\test」をそのソースに添付している理由です。

全体として、私の目標は Robocopy でファイルをコピーすることですが、ソースはユーザー入力に基づいています (したがって、フォルダー オプションを選択します)。また、バックアップ先を指定する「宛先」オプションを追加したいと思います...しかし、それは本当にオプションです。この最初の問題を整理すれば、それを理解できると確信しています。

事前にすべての支援に感謝します!

4

1 に答える 1

1

それがあなたの時間を節約するなら...

RoboCopy GUI が存在します。

http://technet.microsoft.com/en-us/magazine/2006.11.utilityspotlight.aspx

これは、VB Script の簡単な使用法です。

ユーザーにフォルダーの選択を求めるプロンプトについては、これを参照してください。 ファイルパスを選択するためのダイアログを開く VBScript

このリンクで他のユーザーが推奨するコードの使用方法の概要を取得したら。私の狂気の簡単な紹介... 保存したいフォルダーをプロンプトして、それを Input という名前のバッチに吐き出してから、バックアップを保存する場所を再度プロンプトします。次に、そのバッチ ファイルを次のように呼び出します。

Call input.bat

RoboCopy 行の前。

それでは、vb コードを活用する方法を決定しましょう。

'Open Windows Shell Script object
    Set wShell=CreateObject("WScript.Shell")
'Executes the MS HTML Application exe to leverage capabilities to select a file.
    Set iExec=wShell.Exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""")
'Sets First Prompt for source reference
    srcepath = iExec.StdOut.ReadLine
    Set oExec=wShell.Exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""")
'Sets Second Prompt for destination reference
    destpath = oExec.StdOut.ReadLine
    Set wShell=Nothing

プロンプトからinput.batを保存するための簡単なVBS調整。

'This will open the new bat file as txt and write.
    const forwriting = 2
    set fso = CreateObject("Scripting.FileSystemObject")
    set output = fso.OpenTextFile("input.bat", ForWriting, True)
    output.writeline "set srcepath=" & srcepath
    output.writeline "set destpath=" & destpath

したがって、バッチを変換する代わりに、利用可能なツールを活用して、費用対効果の高いものにしてください。

于 2014-10-25T22:24:03.840 に答える