• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでXCOPYの実行結果を取得したい)

VBAでXCOPYの実行結果を取得する方法

このQ&Aのポイント
  • VBAのshell関数を利用してXCOPYを実行し、ファイルのコピー結果を取得する方法をまとめました。
  • 実行結果に表示されるファイルのコピーに失敗したファイル名のみを取得することは可能でしょうか?
  • 検索しても答えが見つからず、わからないという方に対して、XCOPYの実行結果から失敗したファイル名を取得する方法を教えていただきたいです。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

ええと、テキストファイル中のファイル名を取り出す方法ですよね? ファイル名に「-」を含んだ物がないと言う前提ですが、テキストファイルをExcelで開いて、データの区切り位置を「-」にするとB列にコピーできなかったファイル名が出ますがそれでは駄目ですか? マクロでやるなら↓こんな感じでしょうか。 取り出したファイル名をSheet1のA列に貼り付けてます。 Sub Sample()  Workbooks.OpenText Filename:="C:\log.txt", Other:=True, OtherChar:="-"  Columns("B:B").Copy  ThisWorkbook.Activate  Sheets("Sheet1").Columns("A:A").Select  ActiveSheet.Paste  Application.CutCopyMode = False  Windows("log.txt").Close End Sub ファイルにアクセス出来ない為にコピーに失敗した場合などは別の内容になりますので、違う方法が必要になります。

asaji7
質問者

お礼

ありがとうございます。 大変参考になりました。確かにコピーできなかったファイル名には区切り文字"-"があります。気づかなかった・・・。 この方法で試してみます。 ありがとうございました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 例えば、Dir関数 で、コピー先を調べるという方法は、思いつくのかもしれませんが、こちらで試してみると、一旦、Shell の子プロに出てxcopy を実行するので、そのスピードとはマッチしないので、コピーが成功しても、誤認識して、ファイルが見当たらないと出てしまいました。 以下のように、コマンドプロンプトの 戻り値(ErrorLevel) を取る方法はあります。 命令 ="xcopy D:\test\ssss.txt D:\test2" ExecCmd 命令, Ret MsgBox Ret '-------------------------------- Function ExecCmd(sCmd As String, Ret As String) _    As Boolean    Dim objShell As Object    Dim objExec As Object    Set objShell = CreateObject("WScript.Shell")    Set objExec = objShell.Exec("%ComSpec% /c " & sCmd)       Do Until objExec.Status: DoEvents: Loop    If Not objExec.StdErr.AtEndOfStream Then      ExecCmd = True      Ret = objExec.StdErr.ReadAll    ElseIf Not objExec.StdOut.AtEndOfStream Then      Ret = objExec.StdOut.ReadAll    End If    Set objExec = Nothing    Set objShell = Nothing End Function ただ、こういう方法は、VB/VBAの範囲ではありません。 VB なら、FileCopy などがありますから、それを使えばよいと思います。

asaji7
質問者

お礼

確かに、FileCopy を利用すれば、簡単に結果を取得することも出来ますね。。 ご提示いただいた内容で一度試して見ます。 ひとまず、お礼まで。 ありがとうございました。

  • F_PAPA
  • ベストアンサー率40% (8/20)
回答No.1

>D:\>xcopy D:\test\ssss.txt D:\test2 >ファイルが見つかりません - ssss.txt >0 個のファイルをコピーしました では、ssss.text が見つからないので「0個」と表示されているのですよね? ということは、「ない」ファイル名を取得することは出来ないのではないでしょうか?

関連するQ&A