• ベストアンサー

WSHでファイルとフォルダのコピーをしたい

こんにちは。 OSはWindows2000,WSHは5.6を使用しています。 WSH(VBScript)で、同一PC内にあるローカルユーザー「suzuki」のマイドキュメントにある全てのファイル、 フォルダ(サブフォルダ)を「takada」に複写したい のですが、最初はコピーできるのですが、2度目以降、 は既に存在しているのでコピーできません(エラーと なります)。 (スクリプトが分からないので)存在チェックはしており ませんが、どのようにコーディングすればよろしいでしょ うか? どうぞよろしくお願いいたします。

  • enako
  • お礼率62% (298/476)

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

>My Picturesフォルダは何度でもコピーされるのですが、 「My Picturesフォルダが」ではなく、「My Picturesフォルダの内容が」ですよね、おそらく。 失敗している原因は、コピーしたMy Picturesが読取専用属性になっているためです。 なので、VBSでコピーする前に、自分で読取専用属性を外してください。 もしくは、VBSの中で、コピー前に読取専用属性を外す処理を追加するか。 #もちろん、My Picturesフォルダ以外にも読取専用の属性がついているファイルやフォルダがあったらしっぱいしますんで。

enako
質問者

お礼

take_tetsuさん、こんにちは。 ご指摘の通り、フォルダの属性は標準でしたが その中にある一部のファイルが読取専用となって おりました!! どうもありがとうございました!!!

enako
質問者

補足

take_tetsuさん、こんにちは。 今ほど気づいたのですが、コピー元 が読み取り専用となっているフォルダをコピー するとコピー先では標準となってしまいました。 次から次へと問題が発生しますが、何か分かり ましたら今一度ご教授願いたいと思います。 よろしくお願いいたします。

その他の回答 (4)

  • syulen
  • ベストアンサー率71% (5/7)
回答No.5

まだ締め切ってなかったので、最終的な回答を。 ただし、VBスクリプトじゃなく、JScriptですが。 どうしてもVBスクリプトがよければ、書き直しますが。 ご自身の環境に合わせて、細部を書き直してください。 っと、聞くばっかりでなく、自分で考えることも必要だと思います。 そうしないと、いつまでたってもつらいだけですよ。 ファイルのコピー権限は、何ででしょうねぇ? 自分のところがWindows2000"Server"だからかな? ま、いいか。 var shell = null ; var fileSystemObject = null ; var sourceFolderInformation = null ; var sourceFolder = null ; var destinationFolderInformation = null ; var destinationFolder = null ; shell = WScript.CreateObject( "WScript.Shell" ) ; fileSystemObject = WScript.CreateObject( "Scripting.FileSystemObject" ) ; destinationFolderInformation = shell.SpecialFolders( "MyDocuments" ) ; destinationFolder = fileSystemObject.GetFolder( destinationFolderInformation ) ; sourceFolderInformation = "C:\Documents and Settings\user1\My Documents" sourceFolder = fileSystemObject.GetFolder( sourceFolderInformation ) ; changeReadAttribute( sourceFolder ) ; fileSystemObject.CopyFolder( sourceFolderInformation , destinationFolder ) ; shell.Popup( "完了" ) ; function changeReadAttribute( folder ) { var enumerator = null ; for( enumerator = new Enumerator( folder.Files ) ; false == enumerator.atEnd( ) ; enumerator.moveNext( ) ) { enumerator.item( ).Attributes = 0 ; } for( enumerator = new Enumerator( folder.SubFolders ) ; false == enumerator.atEnd( ) ; enumerator.moveNext( ) ) { enumerator.item( ).Attributes = 0 ; changeReadAttribute( enumerator.item( ) ) ; } }

enako
質問者

お礼

syulenさん、こんにちは。 詳細なスクリプトありがとうございます。 「聞くばっかりでなく、自分で考えることも 必要だと思います」はおっしゃられる通りで 反省しております。 VBScriptはある程度「読める」のですが、 JScriptは分かりませんが雰囲気は掴めました。 どうもありがとうございました。

  • syulen
  • ベストアンサー率71% (5/7)
回答No.3

ちょっと確認してみてください。 User1からUser2へコピーすることを考えます。 User1、User2ともにPowerUser権限ですよね。 まず、User2へログオンします。 そしてスクリプトを実行します。 っと、普通なら個の段階で、PowerUser同士であれば、 「書き込みできません」 のエラーが出るはずです。 実際には、読み込みもとのソースコードを読む権限がなく、ファイルが読み込めないので、コピーできない、ということですが。 実際に環境を構築して試して見ましたので、間違いないと思います。 はじめの一回目を実行するユーザーの権限は、 [Administrator]ではないですか? [My Documents]フォルダは、ユーザー個別のフォルダで、 他のユーザーは読み書きできないと思いますが。 いかがでしょう? また、Administrator権限であったとき、2度目にコピーできない理由を考えてみます。 答えは簡単。 User1側の新規作成ファイルまたはディレクトリが読取専用だからです。 ディレクトリコピーでは、その属性もコピーされます。 User1で新規に作成したフォルダやファイルが読取専用であった場合、コピー先のファイルも読取専用となります。 2回目のコピーは、読取専用のファイルやフォルダに対して上書きを試みることになるので、失敗するということです。 今のところは、読取専用属性を持つファイルへの強制上書きを行うオプションはありませんので、元ファイルの読取専用属性を解除する、というのが、問題解決方法となるでしょうか。 それでは。

enako
質問者

お礼

syulenさん、こんにちは。 ユーザーの権限はどちらも、Power Usersです。 Power Users同士であればコピーできるようです。 ただ、2回目の失敗は、お察しのとおり、読み取り 専用となっているファイルが存在していたための ようでした! 読取専用ファイルに直接上書きができれば楽なん ですけどねー(それでは読取専用属性が無意味と なってしまいますけどね)。 どうもありがとうございました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2
参考URL:
http://www.interq.or.jp/student/exeal/dss/ref/wsh/scripting/filesystemobject.html#CopyFolder
enako
質問者

補足

taka_tetsuさん、こんにちは。 回答ありがとうございます。 "FS.CopyFolder M, F,True" としましたが、やはり書き込みできません となります。因みに、 "FS.CopyFolder M, F,False" とすると既に同じファイルが存在しています となります。 コピーできないフォルダの属性は変更してあり ませんし、コピー元・先ともPower Usersです。 引き続きよろしくおねがいいたします。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

どういったスクリプトでコピーをしているのでしょうか?

enako
質問者

補足

taka_tetsuさん、こんにちは。 スクリプトは以下の通りです。 ************************************************ Option Explicit Dim WSell,F,X,MyDoc,M Set WSell = CreateObject("WScript.Shell") MyDoc = WSell.SpecialFolders("MyDocuments") Set X = CreateObject("Scripting.FileSystemObject") Set F = X.GetFolder(MyDoc) M = "C:\Documents and Settings\user1\My Documents" X.CopyFolder M, F msgbox "完了" ************************************************ 「user1」のマイドキュメントをログオンしたユーザーの マイドキュメントにコピーしたいのです。 ファイルや、My Picturesフォルダは何度でもコピーされ るのですが、新規で作成したフォルダは2度目以降実行するとエラーになってしまいます(書き込みできませんとなります)。 よろしくお願いいたします。

関連するQ&A

  • [WSH] ファイルのコピーができない

    こんにちは。 次のようなスクリプトでFTPフォルダにファイルをコピーしようとしたのですが、カレントフォルダにファイルがコピーされてしまうようです。 どうすれば、FTPフォルダにファイルをコピーできるのでしょうか? var objShell = WScript.CreateObject("Shell.Application"); var objFolder = objShell.NameSpace("ftp://user:password@sitename/directory/"); objFolder.CopyHere("C:\\WINNT\\win.ini"); WScript.Sleep(6000); ※下記のページを参考にさせていただき作成しました。http://homepage3.nifty.com/aya_js/wsh/wsh25.htm

  • WSH(VBScript)で共有フォルダを作成したい

    こんにちは。 OSはWIN2K,WSHは5.6を使用しています。 ドメインユーザーでログオンし、「D:\共有」 フォルダが存在しないならそれを作成し、 共有をかけ、アクセス許可はドメインユーザ が所属するグループだけにフルコントロール を許可したいのですが、どのようなスクリプト で実現可能でしょうか? よろしくお願いいたします。

  • ファイルをコピーしたい。できれば圧縮まで。

    Set fs = CreateObject("Scripting.FileSystemObject") fs.CopyFile("C:\WINDOWS\デスクトップ\作業時間.xls","C:\WINDOWS\デスクトップ\kiroku\作業時間.xls") デスクトップにある作業時間というエクセルのファイルをkirokuフォルダにコピーをしようと、上記のWSHを書きました。 (当方 WSHとVBスクリプトの違いはよくわかりません。) ところが実行すると スクリプト: C:\WINDOWS\デスクトップ\kopi.vbs 行: 2 文字: 82 エラー: Sub プロシージャを呼び出すときに、かっこを使うことはできません。 コード: 800A0414 ソース: Microsoft VBScript コンパイル エラー とエラーになります。  たぶん ” の使い方が悪いと思うのですが、どうもうまくいきません。 どこが悪いか指摘してください。 当方 ME使用してます。  フロッピーにバックアップを取るために毎回コピーと圧縮を繰り返しているので自動化できないかと考えてます。 

  • バッチファイルにてフォルダのみをコピーしたい

    たくさんのフォルダが有って、その下にもサブフォルダがあります。 また、フォルダの中にはファイルも存在します。 このような状況の中、サブフォルダもフォルダもコピーせず、フォルダのみをコピーしたいのですが、バッチファイルにて可能でしょうか?

  • VBScript でサブフォルダも含めて、フォルダごとコピーを実行するには?

    バックアップの自動化をもくろんでいます。 VBScriptを用意し定刻に実行するようにしようと考えています。 VBScript でサブフォルダも含めて、フォルダごとコピーを実行するには、どうプログラムをかけばよいでのしょうか? Set objFS = CreateObject ("Scripting.FileSystemObject") objFS.CopyFolder "c:\test1", "c:\test2", false だとtest1の中のサブフォルダはコピーしてくれませんでした。 ここでオプションか何かで、サブフォルダーごとコピーしたいのです。 参考までにコマンドプロンプトの xcopy c:\test1 c:\test2 /x と同じ働きをさせたいのです。 よろしくお願い致します。

  • ADログオン時にファイルコピー

    下記の仕様を実現させたいのですが、 ご教示いただけますでしょうか? 1.ドメインログオン時に、任意のユーザーに対して、 任意のサーバー上の任意のファイルを、ログオンしたユーザーの ローカルのフォルダにコピーしたい。 ※要は毎回起動時に、最新のモジュールをローカルに コピーさせたい(ドメインユーザー毎に設定) ログオンスクリプトというキーワードは浮かぶのですが、 スクリプト自体をどのように書くのか? 書いたスクリプトをどのように実行させるのかを教えていただければと 思います!

  • フォルダをコピー フォルダの中に入れたい FSO

    vbaです。よろしくお願いします。 Sub Sample() Dim myFSO As Object Dim MyPath As String MyPath = "C:\Users\ああああ\Desktop\" Set myFSO = CreateObject("Scripting.FileSystemObject") myFSO.CopyFolder MyPath & "コピーしたフォルダーを入れるフォルダー", MyPath & "コピーするフォルダ" Set myFSO = Nothing End Sub こんな感じで、デスクトップにある、"コピーするフォルダ"をコピーして、 デスクトップにある、"コピーしたフォルダーを入れるフォルダー"の中に入れたいのですが 上記のコードを実行しても何も起きません。 コピーしたフォルダーを入れるフォルダーの中身を見ても、空です。 ”コピーしたフォルダーを入れるフォルダー”の中に、"コピーするフォルダ" を入れる方法を教えてください。

  • クライアントからサーバーにフォルダごとファイルをコピーするバッチファイル

    お世話になっております。 今回出された課題の中に、わからないところがいくつかありましたので ご協力いただければと思い、投稿させていただきました。 下記の内容について、ご存知の方がおられましたら お教え頂きたいとおもいます。 (1)、192.168.*.***のAフォルダを、ネットワークドライブ(ドライブ名:Z)に割当てる ※サーバのユーザ名:user、パスワード:password (2)、サーバのフォルダ(B)にクライアントPCのマイドキュメントのファイルをすべてコピーする (3)、コピーが終了したことを示すテキストファイル(end.txt)をデスクトップに作成し ファイル内に“コピーは正常に終了しました”というコメントを表示させる 以上の3つのことについて、お教え願いたいと存じます。 よろしくお願いいたします。

  • tempフォルダの使用中ファイルをコピーしたい

    C:\Documents and Settings\ユーザ\Local Settings\Temp フォルダの下にあるファイルを別のフォルダにコピーしたいのですが、「他のプロセスで使用中」ということでコピーできませんでした。他のプロセスというのはIEのようですが、IEを終了させるとファイルも消えてしまいます。このファイルをコピー又は消えないようにする方法はありませんか?読み取り専用にしてみましたが、ダメで、「ロック解除」というのをフリーソフトでやってみましたが、IEを終了させてしまいやっぱりダメでした。

  • テキストファイルの中身をコピーしてメールの本文に入れる方法

    いつもお世話になっております。 タイトルの通りなのですが、 VBScriptでテキストファイルの内容をコピーして、 同スクリプト内で作られるCDOのTextbodyの中に貼り付けたいのですが方法がわかりません。 どなたかよろしくお願いいたします。