
こんにちは。
OSはWindows2000,WSHは5.6を使用しています。
WSH(VBScript)で、同一PC内にあるローカルユーザー「suzuki」のマイドキュメントにある全てのファイル、
フォルダ(サブフォルダ)を「takada」に複写したい
のですが、最初はコピーできるのですが、2度目以降、
は既に存在しているのでコピーできません(エラーと
なります)。
(スクリプトが分からないので)存在チェックはしており
ませんが、どのようにコーディングすればよろしいでしょ
うか?
どうぞよろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
>My Picturesフォルダは何度でもコピーされるのですが、
「My Picturesフォルダが」ではなく、「My Picturesフォルダの内容が」ですよね、おそらく。
失敗している原因は、コピーしたMy Picturesが読取専用属性になっているためです。
なので、VBSでコピーする前に、自分で読取専用属性を外してください。
もしくは、VBSの中で、コピー前に読取専用属性を外す処理を追加するか。
#もちろん、My Picturesフォルダ以外にも読取専用の属性がついているファイルやフォルダがあったらしっぱいしますんで。
この回答への補足
take_tetsuさん、こんにちは。
今ほど気づいたのですが、コピー元
が読み取り専用となっているフォルダをコピー
するとコピー先では標準となってしまいました。
次から次へと問題が発生しますが、何か分かり
ましたら今一度ご教授願いたいと思います。
よろしくお願いいたします。
take_tetsuさん、こんにちは。
ご指摘の通り、フォルダの属性は標準でしたが
その中にある一部のファイルが読取専用となって
おりました!!
どうもありがとうございました!!!
No.5
- 回答日時:
まだ締め切ってなかったので、最終的な回答を。
ただし、VBスクリプトじゃなく、JScriptですが。
どうしてもVBスクリプトがよければ、書き直しますが。
ご自身の環境に合わせて、細部を書き直してください。
っと、聞くばっかりでなく、自分で考えることも必要だと思います。
そうしないと、いつまでたってもつらいだけですよ。
ファイルのコピー権限は、何ででしょうねぇ?
自分のところがWindows2000"Server"だからかな?
ま、いいか。
varshell = null ;
varfileSystemObject = null ;
varsourceFolderInformation = null ;
varsourceFolder = null ;
vardestinationFolderInformation = null ;
vardestinationFolder = 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( "完了" ) ;
functionchangeReadAttribute( folder )
{
varenumerator = 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( ) ) ;
}
}
syulenさん、こんにちは。
詳細なスクリプトありがとうございます。
「聞くばっかりでなく、自分で考えることも
必要だと思います」はおっしゃられる通りで
反省しております。
VBScriptはある程度「読める」のですが、
JScriptは分かりませんが雰囲気は掴めました。
どうもありがとうございました。
No.3
- 回答日時:
ちょっと確認してみてください。
User1からUser2へコピーすることを考えます。
User1、User2ともにPowerUser権限ですよね。
まず、User2へログオンします。
そしてスクリプトを実行します。
っと、普通なら個の段階で、PowerUser同士であれば、
「書き込みできません」
のエラーが出るはずです。
実際には、読み込みもとのソースコードを読む権限がなく、ファイルが読み込めないので、コピーできない、ということですが。
実際に環境を構築して試して見ましたので、間違いないと思います。
はじめの一回目を実行するユーザーの権限は、
[Administrator]ではないですか?
[My Documents]フォルダは、ユーザー個別のフォルダで、
他のユーザーは読み書きできないと思いますが。
いかがでしょう?
また、Administrator権限であったとき、2度目にコピーできない理由を考えてみます。
答えは簡単。
User1側の新規作成ファイルまたはディレクトリが読取専用だからです。
ディレクトリコピーでは、その属性もコピーされます。
User1で新規に作成したフォルダやファイルが読取専用であった場合、コピー先のファイルも読取専用となります。
2回目のコピーは、読取専用のファイルやフォルダに対して上書きを試みることになるので、失敗するということです。
今のところは、読取専用属性を持つファイルへの強制上書きを行うオプションはありませんので、元ファイルの読取専用属性を解除する、というのが、問題解決方法となるでしょうか。
それでは。
syulenさん、こんにちは。
ユーザーの権限はどちらも、Power Usersです。
Power Users同士であればコピーできるようです。
ただ、2回目の失敗は、お察しのとおり、読み取り
専用となっているファイルが存在していたための
ようでした!
読取専用ファイルに直接上書きができれば楽なん
ですけどねー(それでは読取専用属性が無意味と
なってしまいますけどね)。
どうもありがとうございました。
No.2
- 回答日時:
CopyFolderの第3パラメータをTrueにするだけ。
参考URL:http://www.interq.or.jp/student/exeal/dss/ref/ws …
この回答への補足
taka_tetsuさん、こんにちは。
回答ありがとうございます。
"FS.CopyFolder M, F,True"
としましたが、やはり書き込みできません
となります。因みに、
"FS.CopyFolder M, F,False"
とすると既に同じファイルが存在しています
となります。
コピーできないフォルダの属性は変更してあり
ませんし、コピー元・先ともPower Usersです。
引き続きよろしくおねがいいたします。
No.1
- 回答日時:
どういったスクリプトでコピーをしているのでしょうか?
この回答への補足
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- グループウェア 一太郎がイントラで開けません。対処方法を知りたいです。 3 2023/04/04 13:30
- Windows 10 Corsair SSDが遅い 4 2023/04/24 07:07
- その他(パソコン・周辺機器) 同じファイル名 上書きしないフリーソフトなどあったら教えて下さい。 仕事で大量の写真などを扱っており 3 2023/05/18 06:43
- Windows 10 Corsair SSDが遅い (2)WDに比べて 3 2023/04/25 11:21
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Windows Vista・XP windows10 フォルダを上書きするときに、元のフォルダを全て削除してコピーする方法 3 2022/05/22 00:53
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Windows 10 Windows10の回復環境 2 2023/02/03 19:13
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル 別ファイルにリ...
-
同じファイル名 上書きしないフ...
-
エクセルで複数のコメントのサ...
-
Vba初心者です。下記のコード助...
-
エクセルのハイパーリンクがコ...
-
VPN経由でExcelを開くのが遅い
-
MSオフィス2013にMS365が上書き...
-
バッチファイル XCOPYで上書き...
-
[エクセル]コピーするとオブジ...
-
vbsでExcelのシートをコピーす...
-
ファイルをコピーできない
-
FTPとファイルコピーの違いにつ...
-
ゴミ箱に移動するような削除を...
-
表示されている文字列をエクセ...
-
VB6で、Form1をコピーする方法...
-
ミラーサイトだけが正常に読み...
-
ファイルサーバ上のファイルが...
-
エクセル 同じデータなのに違う...
-
VB6.0でデバッグ時、文字列の値...
-
【Excel VBA】 多くのファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
ファイルサーバ上のファイルが...
-
Vba初心者です。下記のコード助...
-
MSオフィス2013にMS365が上書き...
-
同じファイル名 上書きしないフ...
-
バッチファイル XCOPYで上書き...
-
エクセルのハイパーリンクがコ...
-
frxファイルの役目
-
[エクセル]コピーするとオブジ...
-
xcopyでのバッチコピー方法でコ...
-
バッチファイル 別ファイルにリ...
-
bat 同名ファイルコピー時にリ...
-
バッチファイルのコピーで
-
アクセス クエリを別のファイ...
-
vbsでファイルやフォルダのコピ...
-
マインクラフトPCをプレイしよ...
-
エクセル2010、図が大きすぎま...
-
現在のブックを閉じないで、マ...
-
開いている別のファイルにExcel...
-
FTPとファイルコピーの違いにつ...
おすすめ情報