フォルダ内ファイルのコピーについての解決方法

このQ&Aのポイント
  • フォルダ内のファイルのコピーについてわからないことがあります。繰り返しの処理でサブディレクトリ内のファイル名を取得することはできますが、コピーしようとすると「書込みできません」のエラーが発生してしまいます。
  • 問題は、指定したフォルダのパスをコピー先に指定する際に発生しています。フォルダコピーの場合は問題なくコピーされ、ファイル名もテキストに出力できます。
  • 解決策としては、コピー先のフォルダのパーミッションや書き込み権限を確認することが重要です。また、コピーしようとするファイルが他のプロセスによって使用されていないかも確認する必要があります。
回答を見る
  • ベストアンサー

フォルダ内のファイルのコピーについて

ルートフォルダとサブフォルダ内のファイルのコピーについて 教えてください。 繰り返しの処理にてサブディレクトリ内のファイル名などの取得は 可能なのですが、コピーをしようとすると「書込みできません」の エラーになってしまいます。 Fname = fsoFile.Name 全ファイル名 objFso.CopyFile iFName &"\"& Fname, oFName,True iFName と oFName はそれぞれ、ダイアログで指定したフォルダの pathが入ります。 また、フォルダコピーであれば問題なくコピーされ、ファイル名を テキストにも出力できます。 objFso.CopyFolder iFName , oFName,True objT.WriteLine Fname 以上、宜しくお願いします。

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

  • ベストアンサー
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.1

コピー先のフォルダを指定するとき、最後に"\"をつけてますか? 指定しないと、フォルダ名ではなく、ファイル名だと判断されますよ。 以下は、 「CopyFile メソッド」 (http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/jsmthcopyfile.asp) より抜粋。 ------------------------------------------------------ 引数 source にワイルドカード文字を使用したとき、 および引数 destination がパスの区切り文字 (\) で終わっているとき、 引数 destination には既存フォルダを指定したと判断され、 条件に一致するファイルがそのフォルダ内へコピーされます。 それ以外のときは、引数 destination には作成するファイルの名前を指定したと判断されます。 ------------------------------------------------------

ken0109
質問者

お礼

dsuekichi さん ありがとうございます。 "¥"をつける場所とファイル名の指定方法を間違えていました。 objFso.CopyFile FName, oFName & "\"

関連するQ&A

  • 他PCへのファイルコピー

    お世話になります。 Webからファイルアップロードしたいのですが、 ファイルサーバーがWebサーバーとは別になっています。 IISで仮想ディレクトリには設定したのですが、 うまくアップできません。 で、ローカルディレクトリにファイルをアップしてから ファイルコピーしようとしたのですが、 やはりできません。 Set objFSO = Server.CreateObject("Scripting.FileSystemObject") objFSO.CopyFile "C:\test\aaa.txt", "\\server1\c:\temp\aaa.txt",True マシンserver1のtempフォルダをネットワークドライブZにしてみて objFSO.CopyFile "C:\test\aaa.txt", "z:\temp\aaa.txt",True としてみてもダメでした。 どうすればアップできるでしょうか? なにか権限の問題でもあるのでしょうか?

  • VBScriptでのファイルコピー

    こんにちは いつもお世話になります。 現在、「ファイルの指定ダイアログ」で選択されたファイルの中身(ファイル名) と「フォルダ指定ダイアログ(参照先)」で選択されたフォルダ(サブフォルダ含む) 内のファイルの名前を比較して、一致しているファイルを「フォルダ指定ダイアログ (保存先)」にコピーし、一致しないファイル名を同じく「フォルダ指定ダイアログ (保存先)」に出力するというツールを作成しています。 以下を実行させても、ファイルのコピーも出力もされないのですが、教えていただけます でしょうか。 宜しくお願い致します。 ---------------------------------------------------------------------- <html><head> <script language="VBScript"> 'Call Window.ResizeTo(500,200) Set objFso = CreateObject("Scripting.FileSystemObject") 'テキストファイル吐き出し場所 Const LIST_FILE = "C:\Documents and Settings\All Users\デスクトップ\NonFile.txt" '色々宣言 Dim objFso Dim inFolderName Dim outFolderName Dim inFileName Dim objTxIn Dim ListFile Dim CurrentFileName '色々定数 Const TristateTrue = -1 Const TristateFalse = 0 Const TristateUseDefault = -2 Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 '参照フォルダをテキストに表示 '------------------------------------------------------------ sub inFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ifd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '保存先フォルダの選択 '------------------------------------------------------------ sub outFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then 'MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ofd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '------------------------------------------------------------ Sub btn_onClick 'ファイルの有無チェック txOut="" inFileName = inFile.Value outFolderName = ofd.value If objFso.FileExists(inFileName) = True Then Set ListFile = objFso.OpenTextFile(inFileName,ForReading,false,TristateTrue) 'ファイルが無いとき Else MsgBox("ファイルが選択されていません。") End If Call iFolder(inFolderName) MsgBox("完了") End Sub 'サブフォルダ内ファイル検査→有 コピー/無 テキスト出力 '------------------------------------------------------------ Sub iFolder(inFolderName) CurrentFileName="" 'フォルダオブジェクト取得 outFolderName = ofd.value If inFolderName ="" then inFolderName = ifd.value Set fsoFolder = objFso.GetFolder(inFolderName) On Error Resume Next CurrentFileName = ListFile.ReadLine For Each fsoFile In fsoFolder.Files If fsoFile.Name = CurrentFileName Then fsoFile.Copy outFolderName,CurrentFileName,false Else set NoFile = objFso.CreateTextFile(LIST_FILE,True) NoFile.WriteLine(CurrentFileName) NoFile.Close End If fsoFile.Close Set fsoFile = Nothing Next For Each fsoSubFolder In fsoFolder.SubFolders Call iFolder(fsoSubFolder) Next End Sub </script> </head>

  • VB6 CommonDialog フォルダ上書きコピー

    VB6 で CommonDialog を使用し、指定先にフォルダをコピーしたいのですが 同じ名前のフォルダが有る場合、上書き確認が表示されずフォルダ配下に 移動してしまう。 On Error GoTo AAA CommonDialog1.Flags = cdlOFNOverwritePrompt CommonDialog1.ShowSave Set cFso = New FileSystemObject Call cFso.CopyFolder(フォルダ元パス, CommonDialog1.FileName, False) Exit Sub AAA: ファイルの場合は確認ダイアログが開いたのですが、上記の場合上書きも出来ません。 コピー処理が違うのでしょうか?教えて下さい。(コピーは出来ました) ファイルの場合 ⇒ FileCopy フォルダ元パス, CD1.FileName で処理しました。

  • vb.net コピーの進捗をプログレスバーで

    質問ばかりでもうしわけないのですが タイトルにあるようにコピーの状況を プログレスバーで表示できたらなと思い作成したのですが うまく動きません。 プログレスバー自身単独では動くのですがコピーと合わせると フリーズしてしまいます。 プログラミング経験と発想力が乏しいのでご教授いただけたら幸いです Private Sub Bt_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_1.Click Dim fname1 As String = "C:\フォルダ名A" Dim fname2 As String = "C:\フォルダ名B" Dim ber1 As Integer If IO.Directory.Exists(fname1) = True Then Me.Lb_1.Text = "テキスト文字" For ber1 = 0 To 20 Me.ProgressBar1.Value = ber1 System.IO.File.Copy("コピー元テキストファイルA", "コピー先テキストファイルA", True) My.Computer.FileSystem.CopyDirectory("コピー元フォルダA", "コピー先フォルダA", True) My.Computer.FileSystem.CopyDirectory("コピー元フォルダB", "コピー先フォルダB", True) Next ber1 If IO.Directory.Exists(fname2) = True Then System.IO.File.Copy("コピー元ファイルB", "コピー先ファイルB", True) End If MessageBox.Show("終了報告テキスト", "タブ名") ' System.IO.Directory.Delete("コピー元", True) Me.ProgressBar1.Value = 0 Application.Exit() こんな感じで作成しております。 ファイル自身が1GBぐらいあるので フリーズしていないかプログレスバーや%表示でしらせたいので 教えていただけると助かります。 よろしくお願いします。

  • サブディレクトリ名、フォルダ構造のみをテキスト出力したい

    ディレクトリ以下のサブフォルダ、 階層5階層ぐらいまでですが、それらを全て テキストに出力、もしくはテキストにコピペしたいです。 ファイルをコピーしなくて、ディレクトリをコピーしなくて、ディレクトリ「名」のみクリップボードか、TXTに記録できるものを探しています。 できればフルパスでの場合と、フルパスじゃなくフォルダ名のみをコピーできる場合、分けてできるソフトがベストです。 サブフォルダも分析してくれるというのをとにかく探しています。フォルダの「構造」には特に拘っていません、フルパスでそれは十分なんですが・・ よろしくお願いします。

  • フォルダコピーで失敗したファイル名をログに取得したい

    こんにちは。 フォルダのコピーをVBスクリプトを使って出来ないか検討しています。 条件は 1. コピーするフォルダにはファイルやサブフォルダが複数存在している 2. コピー途中でエラー(コピー出来ないファイルがあった場合等)が発生した場合はそのファイルをスキップして処理を継続する。 3. エラーの対象となったファイルまたはフォルダ名をログに出力する。 試しにVBスクリプトで作成してみましたが、これだとコピー処理が成功or失敗しか分かりません。 イメージ的には、コピー元のフォルダ内の各ファイルの情報を取得して、ひとつひとつのファイル毎にループ制御を使ってコピー処理を行いその際に正常にコピーしたかどうかをチェック出来ればと考えています。 以下のソースは上記の条件を満たしていませんが、(参考になりませんが)参考として載せました。 スクリプトはまだまだ未熟なので、よろしくお願いします。 'エラーが発生しても次のステップに進むための宣言 On Error Resume Next 'FileSystemObjectオブジェクトを作成 Set objFS = CreateObject("Scripting.FileSystemObject") 'WScript.Shellオブジェクトを作成 Set objShell = CreateObject("WScript.Shell") 'ログファイルの作成 set strLog = objFS.CreateTextFile("C:\Errlog.log", True) 'フォルダコピー If objFS.FolderExists("c:\aaa") = False Then objFS.CreateFolder("c:\aaa") objFS.copyFolder "c:\aaa", "c:\bbb" If Err.Number <> 0 Then MsgBox(Err.Number & " " & Err.Description) End If strLog.WriteLine "コメント" Else objFS.copyFolder "c:\aaa", "c:\bbb" strLog.WriteLine "コメント" End If

  • 共有フォルダへのフォルダ作成とファイルコピー

    PC1からPC2の共有フォルダへのフォルダ作成とファイルコピーを行いたいのですが、 フォルダ作成に「_mkdir」を使用しているのですが、 これではフォルダを作成してくれませんでした。 ファイルコピーも「CopyFile」で1個づつコピーすることはできたのですが、 複数のファイルを一気にコピーする方法がわかりません。 これも「SHFileOperation」を使用してみたのですが、 ネットワークでは使用できないみたいです。 要は、PC1からPC2の共有フォルダへ、 指定のフォルダとその中のサブフォルダ及びファイル類全てを コピーしたいのです。 Windows上でドラック&ドロップで行うような感じです。 元々はPC1内だけでのフォルダ作成やファイルコピーをしていいたのですが、 これをネットワークでもできるようにしないとならなくなり、 調べてみたのですが、 いまいちネットワークプログラミングを理解できなくてこちらに質問させて頂きました。 どなたか情報をお持ちの方がいらっしゃいましたら お力をお貸しください。 よろしくお願いいたします。

  • フォルダのコピー

    こんにちわ。takaoPRと申します。 今、指定したフォルダから指定したフォルダへのコピーをするプログラムを作成しているのですが、思う処理ができずに、困っています。 最初、FileSystemObjectのCopyFolderを使用したところ、読取専用ファイルのコピー時にエラーが出るので、 Win32APIの、「SHFileOperation」を使用しましたが、フォルダの上書きと読取専用ファイルの上書きで確認ダイアログが表示されてしまいます。 実現したい処理は、何のメッセージも出さずに(重複ファイルは勝手に上書きします)フォルダごとコピーをしたいのですが、実現する方法はないのでしょうか? 申し訳ありませんが、みなさまのお知恵をお借りできれば嬉しいです。宜しくお願い致します。

  • エクセルマクロでフォルダのコピーがしたい

    こんにちわ 色々調べてフォルダのコピーはできたのですが、色々いじっていて分からないことが出てきたので質問に来ました。 やりたいことはフォルダをコピーしたいのですが、それぞれ名前を自動で変えようと思い下記(1)を元に下記(2)を作ってみましたが、動きませんでした。 (1)いくつかのサイトを見て動いたマクロ sub test() Dim myFSO As New FileSystemObject myFSO.CopyFolder "C:\test", "C:\test2" End Sub (2)ちょっといじって動かないマクロ sub test() Dim myFSO As New FileSystemObject Dim name As String Dim name2 As String name = "C:\test" name2 = "C:\test2" myFSO.CopyFolder "name", "name2" End Sub 「パスが見つかりません」と出てきたので、読み込んでいないのだとは思うのですが、どうしたら動くかアドバイスをいただきたいです。 よろしくお願いします。

  • vbsスクリプトについて

    いつもありがとうございます。 実行するVBSファイルのカレントディレクトリを取得して、同じディレクトリにAフォルダがなければ Aフォルダを作成するといった下記処理を考えております。 Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(Path) = True Then objFSO.DeleteFolder (Path) objFSO.CreateFolder (Path) Else objFSO.CreateFolder (Path) End If Pathの変数にAフォルダまでのフルパスを入れたいのですが 実現できるソースをアドバイスいただけませんでしょうか。 Path = objFSO.CreateFolder (".\A") でパスは取得できるのですが、フォルダの存在チェックの前にフォルダが作られるため だめでした。。 宜しくお願い致します。

専門家に質問してみよう