dポイントプレゼントキャンペーン実施中!

VBAでshell関数を利用してXCOPYを実行し、テキストファイルにその実行結果を出力しています。
しかし、結果には

D:\>xcopy D:\test\ssss.txt D:\test2
ファイルが見つかりません - ssss.txt
0 個のファイルをコピーしました
もしくは
D:\>xcopy D:\test\sssss.txt D:\test2
D:\test\sssss.txt
1 個のファイルをコピーしました
というDOS画面で表示される内容が出力されているだけです。

ここでコピーに失敗している(0個のファイルをコピーしました)ファイル名だけを取得することは可能でしょうか?

色々サイトを検索してみましたが、答えが見つかりません。
恐れ入りますが、どなたかご存知の方がいらっしゃいましたらご教示ください。
よろしくお願いします。

A 回答 (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

ファイルにアクセス出来ない為にコピーに失敗した場合などは別の内容になりますので、違う方法が必要になります。
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/01/29 23:20

こんにちは。



例えば、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 などがありますから、それを使えばよいと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/29 23:24

>D:\>xcopy D:\test\ssss.txt D:\test2


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!