
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個のファイルをコピーしました)ファイル名だけを取得することは可能でしょうか?
色々サイトを検索してみましたが、答えが見つかりません。
恐れ入りますが、どなたかご存知の方がいらっしゃいましたらご教示ください。
よろしくお願いします。
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
ファイルにアクセス出来ない為にコピーに失敗した場合などは別の内容になりますので、違う方法が必要になります。
ありがとうございます。
大変参考になりました。確かにコピーできなかったファイル名には区切り文字"-"があります。気づかなかった・・・。
この方法で試してみます。
ありがとうございました。
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 などがありますから、それを使えばよいと思います。
確かに、FileCopy を利用すれば、簡単に結果を取得することも出来ますね。。
ご提示いただいた内容で一度試して見ます。
ひとまず、お礼まで。
ありがとうございました。
No.1
- 回答日時:
>D:\>xcopy D:\test\ssss.txt D:\test2
>ファイルが見つかりません - ssss.txt
>0 個のファイルをコピーしました
では、ssss.text が見つからないので「0個」と表示されているのですよね?
ということは、「ない」ファイル名を取得することは出来ないのではないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じファイル名 上書きしないフ...
-
[エクセル]コピーするとオブジ...
-
Vba初心者です。下記のコード助...
-
エクセルで複数のコメントのサ...
-
frxファイルの役目
-
ファイルコピーのスクリプトで...
-
賃貸アパートの退去の時の返却...
-
バッチファイル XCOPYで上書き...
-
エクセルファイルに「コピー」...
-
変更の有ったファイルを確認し...
-
ファイルサーバ上のファイルが...
-
ゴミ箱に移動するような削除を...
-
開いている別のファイルにExcel...
-
FSO.CopyFileでのエラー無視方法
-
バッチファイル 別ファイルにリ...
-
Tabctl32.ocxについて
-
現在のブックを閉じないで、マ...
-
アクセス クエリを別のファイ...
-
バッチファイルのコピーで
-
エクセルのハイパーリンクがコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
同じファイル名 上書きしないフ...
-
ファイルサーバ上のファイルが...
-
frxファイルの役目
-
バッチファイル XCOPYで上書き...
-
[エクセル]コピーするとオブジ...
-
Vba初心者です。下記のコード助...
-
エクセルのハイパーリンクがコ...
-
バッチファイル 別ファイルにリ...
-
エクセル2010、図が大きすぎま...
-
現在のブックを閉じないで、マ...
-
vbsでExcelのシートをコピーす...
-
xcopyでのバッチコピー方法でコ...
-
バッチファイルのコピーで
-
FTPとファイルコピーの違いにつ...
-
アクセス クエリを別のファイ...
-
パワポでスライドをコピーでき...
-
vbsでファイルやフォルダのコピ...
-
開いている別のファイルにExcel...
-
bat 同名ファイルコピー時にリ...
おすすめ情報