VBAでXCOPYの実行結果を取得する方法
- VBAのshell関数を利用してXCOPYを実行し、ファイルのコピー結果を取得する方法をまとめました。
- 実行結果に表示されるファイルのコピーに失敗したファイル名のみを取得することは可能でしょうか?
- 検索しても答えが見つからず、わからないという方に対して、XCOPYの実行結果から失敗したファイル名を取得する方法を教えていただきたいです。
- ベストアンサー
VBAでXCOPYの実行結果を取得したい
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個のファイルをコピーしました)ファイル名だけを取得することは可能でしょうか? 色々サイトを検索してみましたが、答えが見つかりません。 恐れ入りますが、どなたかご存知の方がいらっしゃいましたらご教示ください。 よろしくお願いします。
- asaji7
- お礼率75% (6/8)
- オフィス系ソフト
- 回答数3
- ありがとう数3
- みんなの回答 (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 ファイルにアクセス出来ない為にコピーに失敗した場合などは別の内容になりますので、違う方法が必要になります。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 例えば、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 を利用すれば、簡単に結果を取得することも出来ますね。。 ご提示いただいた内容で一度試して見ます。 ひとまず、お礼まで。 ありがとうございました。
- F_PAPA
- ベストアンサー率40% (8/20)
>D:\>xcopy D:\test\ssss.txt D:\test2 >ファイルが見つかりません - ssss.txt >0 個のファイルをコピーしました では、ssss.text が見つからないので「0個」と表示されているのですよね? ということは、「ない」ファイル名を取得することは出来ないのではないでしょうか?
関連するQ&A
- xcopyでCDにコピー
出力先がハードディスクの場合はコピーされるのですが、 xcopy C:\Test\*.* D:\ /e /c /h /y 出力先がCD-Rのドライブだとコピーが出来ません…ご教授下さい。 xcopy C:\Test\*.* F:\ /e /c /h /y ↓次のメッセージが表示される 無効なドライブ指定です 0 個のファイルをコピーしました
- ベストアンサー
- その他([技術者向] コンピューター)
- バッチファイル XCOPYで上書きしない
バッチファイルでXCOPYを実行し既存ファイルを上書きしないようにしたい(上書き確認を自動でNo返答する)さらに、存在しないファイルはコピーしたい ●構成 ・C:\test\A\A.txt がある ・バッチファイルと同列に、A\A.txt 及び B.txt が存在 さらにバッチファイルと同列に、からフォルダB が存在 ●試したコマンド: XCOPY * C:\test /E /-Y /Q < nul > nul ●結果:C:\test\A\A.txt は上書きされないが、B.txt 及びフォルダBがコピーされない ●求める結果: C:\test\A\A.txt は上書きされず、コピー先に存在しないB.txt 及びフォルダBがコピーしたい 宜しくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- エクセルのVBAからDOSコマンドのDIRを実行したい
DOSコマンドのDIRコマンドを、エクセルのVBAから実行したいのですがうまくいきません。助けてください。 DOSプロンプト上で、たとえば「DIR c:\*.mdb /s/b > c:\aaa.txt」を実行すると、Cドライブ上の拡張子(MDB)のファイルの一覧を、aaa.txt上に出力できるのですが、それをエクセルのVBAから実行したいのです。 Shell関数で、COMMAND.COMを実行することはできるのですが、それ以降の指定がわかりません。COMMAND.COMを実行した後、DOSプロンプトをアクティブにし、「DIR c:\*.mdb /s/b > c:\aaa.txt」をsendkeyで送れば・・・とアドバイスをうけたりもしたのですが、sendkeyでなくてもできた記憶があります。 よい方法があれば教えてください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- VBAのShellの同期的実行
ExcelVBAについての質問です。コマンドプロンプトで実行するプログラムをCで作成しました(これをXXX.exeとします)。このプログラムは計算が終了した後で、その結果のファイルを作成します(これをYYY.txtとします)。このプログラムを操作し、結果を表にして出力するために、ExcelVBAでshellを使って以下のようなプログラムを作成しました。 shell("XXX.exe") call Output Outputでは、XXX.exeが作成したファイルYYY.txtからデータを読み込んでシートに結果を出力するのですが、うまくファイルを読み込みません。多分、shellにより実行したXXX.exeが終了する前にOutputが呼ばれているのだと思うのですが、もしそうだとしたらどのような解決方法があるのでしょうか。よろしくお願いします。 WinXp、Excel2000です
- ベストアンサー
- オフィス系ソフト
- bat処理の実行結果ログ出力方法について
Windows2003Serverで、bat処理でネットワーク共有したHDDにバックアップデータを移動する処理を組込しているのですが、実行される場合、されない場合があるため、実行結果をログ出力したいと思っています。 MV D:TEST.TXT Z:\TEST.TXT >>D:\LOG.TXT として出力しますと、エラーであっても、正常であっても何も出力されませんでした。 コマンドプロンプト上で返される結果(ファイルが存在しない場合、「指定されたファイルが見つかりません」の表示をする等)をログ出力する方法はないでしょうか? ご教授下さい。
- ベストアンサー
- Windows系OS
- XCOPYについて
Win98が立ち上がらなくなり、かろうじてDOSは立ち上がる状態です。 せめてマイドキュメントにあるファイルだけでもFDにコピーしたいのですが XCOPYでコピーしたところ容量がFD以上あるため、少しのファイルしかコピーできません。何かいい方法を教えていただけないでしょうか。
- ベストアンサー
- Windows 95・98
- Batファイルでxcopyを実行するとループする
BatファイルでCドライブのaaaフォルダからDドライブのaaaフォルダへファイルをコピーするxcopyの記述をしました。 xcopy c:\aaa d:\aaa /i 作成したBatファイルを実行するとループしてるのか、このコマンドが何度も繰り返され、コマンドプロンプトの×ボタンを押すまで終わりません。 コマンドプロンプトから直接xcopyを入力すると問題なくコピーされます。 どこか私の記述が間違っているのでしょうか?
- ベストアンサー
- その他(Windows)
- xcopyについて質問なのですが。
xcopyについて質問なのですが。 あるディレクトリの配下に、「20091206」というフォルダ(フォルダの中には.datファイルや、.txtファイルなどがあります。)と、コントロールファイルがあります。 そこのディレクトリから、違うサーバーのディレクトリにxcopyを使用して、フォルダごと(中身の.datファイルや、.txtファイルも一緒に)コピーさせるバッチを作成しています。 xcopy のオプションを色々探して試してみたのですが、 xcopy /c /e /i /y /zだと、フォルダだけコピーして、中身の.datファイルや、.txtファイルがなかったり、 xcopy /I /Yだと、コントロールファイルだけコピーされて、フォルダはコピーされなかったりと上手くいきません。 どのオプションを使用すれば、ディレクトリの配下に存在する、フォルダとファイルのうち、フォルダ(中身のファイルも)だけコピーできるのでしょうか? \\10.xxx.xxx.xx\aaaという、ディレクトリの中に、 (1)abc.ctl (2)20091206 |__xyz.dat |__aaa.txt があり、(2)(.dat、.ctlも一緒)をxcopyを使用して、他のサーバー上のディレクトリにおきたいです。 ご教授よろしくお願い致します。
- ベストアンサー
- Windows XP
- xcopyについて質問なのですが。
xcopyについて質問なのですが。 あるディレクトリの配下に、「20091206」というフォルダ(フォルダの中には.datファイルや、.txtファイルなどがあります。)と、コントロールファイルがあります。 そこのディレクトリから、違うサーバーのディレクトリにxcopyを使用して、フォルダごと(中身の.datファイルや、.txtファイルも一緒に)コピーさせるバッチを作成しています。 xcopy のオプションを色々探して試してみたのですが、 xcopy /c /e /i /y /zだと、フォルダだけコピーして、中身の.datファイルや、.txtファイルがなかったり、 xcopy /I /Yだと、コントロールファイルだけコピーされて、フォルダはコピーされなかったりと上手くいきません。 どのオプションを使用すれば、ディレクトリの配下に存在する、フォルダとファイルのうち、フォルダ(中身のファイルも)だけコピーできるのでしょうか? \\10.xxx.xxx.xx\aaaという、ディレクトリの中に、 (1)abc.ctl (2)20091206 |__xyz.dat |__aaa.txt があり、(2)(.dat、.ctlも一緒)をxcopyを使用して、他のサーバー上のディレクトリにおきたいです。 ご教授よろしくお願い致します。
- 締切済み
- Windows XP
- xcopyでのバッチコピー方法でコピーできない
こんにちは。 xcopyを使って、ネットワーク上のファイルを、同じくネットワーク上の別フォルダにコピーしたいと思っています。 ローカルで下記のコードを書きました。 xcopy C:\abc.txt D:\ これは問題なく、Dドライブ直下にデータがコピーできました。 次に、ネットワーク上のあるファイルを指定してコピーするコードを書きました。 xcopy \\mynetwork\abc.txt \\mynetwork\something\ or xcopy "\\mynetwork\abc.txt" "\\mynetwork\something\" これは一応はバッチ画面は起動されるのですが、正しくコピーをできませんでした。つまりコピーは失敗におわりました。 何が間違っているでしょうか? やりたい事は、単一のテキストファイルを、ある特定のフォルダにコピーして、既に同じファイル名があれば上書きするといったことをやりたいです。 よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
お礼
ありがとうございます。 大変参考になりました。確かにコピーできなかったファイル名には区切り文字"-"があります。気づかなかった・・・。 この方法で試してみます。 ありがとうございました。