質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • VBScript

    288questions

    VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

[VBS]リモートデスクトップ接続したホストの特定ファイルをクライアントにコピーしたい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 780

wakab

score 2

前提・実現したいこと

前任者が作成したVBSを書き換えて、
リモートデスクトップ接続先のDドライブ配下のファイルを
クライアント側Cドライブにコピーするスクリプトを書いています。

ツールの動作は以下の通りです。

  1. クライアント側で必要なファイルの日付と時間を決定
  2. クライアントからホストにリモートデスクトップ接続
  3. ホスト側で該当日付と時間のフォルダ「yyyymmdd_HHMM」をD:\tempに格納
  4. ホスト側からクライアント側に3.をフォルダごとコピー

該当ソースコードを実行するのはホスト(リモートデスクトップ接続)からです。

発生している問題・エラーメッセージ

エラー処理部分(下記ソースコード★部分と思っています)で
「オブジェクトがありません」
と表示されます。

該当のソースコード

※ツール動作4.に当たる部分のみ抜粋しています。

Option Explicit

    Dim objFSO                          ''FileSystemObject
    Dim sFolderPathHostResult           ''ホスト側フォルダパス(結果用)
    Dim sFolderPathClientResult         ''クライアント側フォルダパス(結果用)
    Dim sNowFolderName                ''フォルダ名のyyyymmdd_HHMM 部分

''エラー設定
On Error Resume Next

  ''初期設定
  sFolderPathHostResult = "D:\temp\"
  sFolderPathClientResult = "\\tsclient\C\ツール\データ取得ツール\取得フォルダ\"

  ''yyyymmdd_HHMM の文字列生成
  sNowFolderName = Replace(FormatDateTime(Now,2),"/","") & "_" & Replace(FormatDateTime(Now,4),":","")

  ''フォルダパスと現在日時をマージ フォルダパス … D:\temp\yyyymmdd_HHMM
   sFolderPathHostResult = sFolderPathHostResult & sNowFolderName

  Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

  If Err.Number = 0 Then
        ''フォルダの存在チェック(コピー元)
        If objFSO.FolderExists(sFolderPathHostResult) <> True Then
            ''ファイルが存在しないので処理終了
            WScript.Echo "設定ファイル「" & sFolderPathHostResult & "」が存在致しません。" & Err.Description
        End If
    End If

    ''フォルダコピー開始
    If Err.Number = 0 Then
        ''ファイルコピー
        objFSO.CopyFolder sFolderPathHostResult, sFolderPathClientResult, True

        If Err.Number = 0 Then
        Else
            WScript.Echo "エラー: " & Err.Description
        End If
    Else
        ''★ ここでエラーが出ていると思われる。
        WScript.Echo "エラー: " & Err.Description
    End If

    ''オブジェクトの開放
    Set objFile = Nothing
    Set objFSO = Nothing

    ''WindowsOSログオフ処理(リモートデスクトップ終了)
    Call subLogOffWindowsOS

    ''完了メッセージ
    MsgBox "処理が完了致しました。", 0, sMessageTitle

    ''処理終了
    WScript.Quit


'WindowsOSログオフ処理(コマンドライン)
Sub subLogOffWindowsOS()
    Dim WshShell     ''WshShell オブジェクト
    Dim objExec      ''Tera Term起動用
    Dim sAppName     ''コマンドライン

     ''コマンドラインを作成
    sAppName = "logoff"

    ''コマンドライン実行
    Set objExec = WshShell.Exec(sAppName)

End Sub

試したこと

該当ソースコード部分で前任者の書いたコードから書き換えたのはこの部分です。

ホスト側D:\temp配下に生成されるフォルダ名を"yyyymmdd_HHMM"とするように
したためです。

  ''yyyymmdd_HHMM の文字列生成
  sNowFolderName = Replace(FormatDateTime(Now,2),"/","") & "_" & Replace(FormatDateTime(Now,4),":","")

  ''フォルダパスと現在日時をマージ フォルダパス … D:\temp\yyyymmdd_HHMM
   sFolderPathHostResult = sFolderPathHostResult & sNowFolderName


以前は下記のようになっていて、その際は問題なく動作していました。

    sFolderPathHostResult = sFolderPathHostResult & Replace(Date, "/", "")
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

同じタグがついた質問を見る

  • VBScript

    288questions

    VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。