Desktopのファイルを別フォルダにコピーしたい

このQ&Aのポイント
  • Desktop上のZIPファイルを別フォルダにコピーして解凍する方法
  • Desktop階層が異なるPCでも実行可能なScriptについて
  • Windows7(32ビット)でのファイルコピー方法
回答を見る
  • ベストアンサー

Desktopのファイルを別フォルダにコピーしたい

Desktop上のあるZIPファイル(例;zzz.zip)を別のフォルダ(例;DドライブのFolder1)にコピーして解凍する場合、下記のVBSで実行できると思いますが、これをDesktopの階層が異なる(後述の xxxxx)不特定多数のPCで実施する場合、実行できない場合があります。 このためDesktopの階層が左右されないScriptにしたいのですが、模範Scriptを教えていただけないでしょうか。DesktopPathなどで対応すればできるのでは、と思いますが、なかなかうまくいきません。 使用PCのOSはWindows7(32ビット)です。 '------------------------------------------------------------- DIR_Source = "C:\xxxxx\Desktop\zzz.zip" DIR_Destination = "D:\Folder1" Const FOF_Silent = &H04 Const FOF_NoConfirmation = &H10 Set objShell = CreateObject("Shell.Application") Set FilesInZip = objShell.NameSpace(DIR_Source).items Set objFolder = objShell.NameSpace(DIR_Destination) If (Not objFolder Is Nothing) Then objFolder.CopyHere FilesInZip, FOF_NoConfirmation + FOF_Silent End If

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

  • ベストアンサー
回答No.3

こんな感じでは? ※定数の宣言部分は省略しています。 Dim oFS Dim oApp Dim oZip Dim oZipItem Dim oZipTo Dim retVal Dim DTpath DTpath = CreateObject("Wscript.Shell").Specialfolders("DeskTop") & "\" toZipPath = "D:\_zipTestFolder" Set oFS = CreateObject("Scripting.FileSystemObject") Set oApp = CreateObject("Shell.application") Set oZip = oApp.NameSpace(DTPath & "test.zip") 'デスクトップにtest.zipがあるとして '解凍先をセット If oFs.FolderExists(toZipPath) = False Then oFS.CreateFolder (toZipPath) End If Set oZipTo = oApp.NameSpace(toZipPath) '解凍 oZipTo.CopyHere oZip.Items, FOF_NoConfirmation + FOF_Silent oApp.shellExecute toZipPath '確認用

yukimina
質問者

お礼

完璧です! ありがとうございました!

その他の回答 (2)

回答No.2

v=createobject("wscript.shell").specialfolders("desktop") msgbox v では?

yukimina
質問者

お礼

コメントを有難うございます。

yukimina
質問者

補足

desktopのパスを取得して、質問の中で記したScriptの中に組み込みたいのですが、それがなかなかうまく実行しないので苦慮してます。

  • kawais070
  • ベストアンサー率52% (2242/4282)
回答No.1

http://okwave.jp/qa/q235894.html 上記のQ&Aが参考になりますでしょうか? SHGetSpecialFolderLocationというWin32 APIでデスクトップのフォルダのPATHが取得できるようです。 VBSでWin32 APIを呼び出すには、以下の方法があります。 http://cx20.main.jp/blog/hello/2012/04/20/hello-win32-api-vbscript-world/ Excelを使うのが簡単かな?Excelなら大抵のパソコンには入っているし。

yukimina
質問者

お礼

参考情報を有難うございます。

yukimina
質問者

補足

フォルダのパス取得については私も検索していたのですが、私自身がVBSを先月から勉強し始めたばかりで、その活用がまだまだできません。 Dim DesktopPath DesktopPath = WSHShell.SpecialFolders("Desktop") を設定していくScriptにすればできると思ってますが、うまくいかないです。エクセルを使用せず、不特定多数の階層の異なるPCで、ワンクリックで実行できないでしょうか。

関連するQ&A

  • vbsでZIPファイルを特定のフォルダへ。その1

    http://d.hatena.ne.jp/haradago/20150402/p1 を参考に VBSでZIPファイルを特定のフォルダへ解凍しようとしているところです。 以下の記述の意味がわからないので解説お願いします。 --------------------------------------------------- '解凍するZIPファイル DIR_SOURCE = "C:\Users\a\Desktop\aaa.zip" '解凍先 DIR_DEST = "C:\Users\a\Desktop\解凍先" '定数 Const FOF_SILENT = &H04 '進捗ダイアログを表示しない。 Const FOF_NOCONFIRMATION = &H10 '上書き確認ダイアログを表示しない([すべて上書き]と同じ)。 'オブジェクト生成 Set objShell = CreateObject("Shell.Application") Set FilesInZip = objShell.NameSpace(DIR_SOURCE).items Set objFolder = objShell.NameSpace(DIR_DEST) '解凍 If (Not objFolder Is Nothing) Then objFolder.CopyHere FilesInZip, FOF_NOCONFIRMATION + FOF_SILENT End If msgbox "解凍がおわったよ" ----------------------------------------------------------- 上記のVBSを実行すると デスクトップ上に ある aaa.zip が 解凍先 という名のフォルダのなかに 解凍されます。 「解凍がおわったよ」というメッセージも表示されます。 なぜ動くのかがわからないです。 ------------------------------- 'オブジェクト生成 Set objShell = CreateObject("Shell.Application") Set FilesInZip = objShell.NameSpace(DIR_SOURCE).items Set objFolder = objShell.NameSpace(DIR_DEST) ----------------------------------- の意味がわかりません。  オブジェクト メソッド プロパティ の意味はなんとなく程度です。 動物にたとえるならば、   犬・・・・オブジェクト   メソッド・・・・吠える、走る    プロパティ 犬の重さ 大きさ   という感じです。 Set objShell = CreateObject("Shell.Application") の意味なんですが、 ウィンドウズパソコンに入っているソフトを使うときによく出てくるんですが そうゆうもんだと 思っとけばいいんですかね?  たとえば  Set FilesInZip = objShell.NameSpace(DIR_SOURCE).items Set objFolder = objShell.NameSpace(DIR_DEST) この2行の意味ってなんでしょうか? google で NameSpace vbs で調べてはいるんですが、 さっぱりわからないです。 最終的には  解凍.vbs ってアイコンに 解凍したいzipファイルをドロップしたら、指定するフォルダへ 解凍ファイルを放り込むスクリプトを作ろうとしてます。 

  • VBS 任意の名前でzip内のファイルを解凍したい

    VBSを使ってzipファイルの解凍を行う際に、解凍ファイルを任意の名前にしたいです。 現在以下の内容のvbsでzipファイルを解凍しています。 --------------------------------------------------------------- zippath = "C:\新しいフォルダー\test.zip" savepath = "C:\新しいフォルダー" Set objShell = CreateObject("Shell.Application") Set FilesInZip = objShell.NameSpace(zippath).items Set objFolder = objShell.NameSpace(savepath) If (Not objFolder Is Nothing) Then objFolder.CopyHere FilesInZip, FOF_NOCONFIRMATION + FOF_SILENT End If --------------------------------------------------------------- 解凍自体は上手くいってるのですが、解凍したファイルの名前が統一されていない為、次の処理でスマートにファイルの指定ができません。 このファイル名を、 ・zipファイルと同じ名前(例えば「test.zip」なら「test.xlsx」など)にする。 ・任意の名前で解凍する。 ことは出来ないでしょうか。 ご回答よろしくお願いします

  • VBSでファイルやフォルダのコピー途中で止まる。

    VBSでファイルやフォルダのコピー途中で止まる。 以前に「コピー中にプログレスバーを表示させるには」http://okwave.jp/qa/q5990703.html ========================================== Const FOF_CREATEPROGRESSDLG = &H0& strTargetFolder = "C:\backup\" Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.NameSpace(strTargetFolder) objFolder.CopyHere "D:*.*", FOF_CREATEPROGRESSDLG ========================================== で教えて頂きました上記スクリプトでコピーはできたのですが、普通では見えない保護されたシステムファイルも丸ごとコピーしようとする見たいで、途中で"System Volume Informationを作成または置き換えできません・・・"エラー表示がされて止まってしまいます。 このようなコピーできないファイルやフォルダを無視するか、指定して除外する方法はありませんでしょうか。 よろしくお願いいたします。

  • VBScriptでのフォルダ指定ダイアログについて

    VBSciptでの「フォルダ指定ダイアログ」について教えてください。 「フォルダ指定ダイアログ」を利用して、保存元のフォルダと保存先の フォルダを選択し、特定ファイル(*.jpg)のコピーをするツールを作っています。 下記のプログラムで、「フォルダ指定ダイアログ」が表示されるのは 確認できたのですが、選択したフォルダの階層をテキストフォームに 表示させる方法を教えてください。(書き込みできませんのエラーになります。) --------------------------------------------------------- Dim objShell Dim objFolder ' オブジェクトの生成 Set objShell = CreateObject("Shell.Application") ' フォルダ選択ダイアログを表示 Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択してください。", 0) Set objShell = Nothing --------------------------------------------------------- 以上、宜しくお願い致します。

  • [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

  • 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>

  • エクセルのデータからフォルダを作成

    エクセル選択・読み込み→フォルダ作成先指定・処理 →作成した空のフォルダを表示 という手順のプログラムです。 コモンダイアログで選んだエクセルのデータを元に、 新しいフォルダを作成したいと思っています。 エクセルには番号(一列目)、氏名(二列目)などが入っており 一人分の情報が一行目に、二人目の情報が二行目・・・という風に一行ずつに入っています。 指定した作成先に、そのエクセルで読み込んだ人数分だけ 空のフォルダを作成し、なおかつ一列目に入っていた番号を フォルダ名にしたいのですが、どうすればいいでしょうか。 途中まで作ってみましたが後が続きません。 よろしくお願いします。 Private Const BIF_RETURNONLYFSDIRS As Long = &H1 Dim objShell As New Shell Dim objFolder As Folder Private Sub Command1_Click() Set objShell = New Shell Set objFolder = objShell.BrowseForFolder(Me.hWnd, "フォルダを選択してください", BIF_RETURNONLYFSDIRS) If objFolder Is Nothing Then MsgBox "ファイルを開く作業をキャンセルします" Else End If Set objShell = Nothing End Sub

  • vbsでのエラー処理についてレクチャーを

    vbsのcopyhere関数でファイルのコピーを行うスクリプトを作成しました。コピー自体は問題なく出来るのですが、コピー元のファイルが存在しなかった場合は何も実行されないまま次の処理へ行ってしまうので、そういう場合にエラー用の処理をさせたいと考えてます。 Errメソッド使えばいいと思うのですがうまくいかなかったのでご教授ください。 試しに作成したvbs----------------------------------------- On Error Resume Next Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.NameSpace(strTargetFolder) 'コピー先フォルダの設定 objFolder.CopyHere strCopyFile , &H10 ' set objShell = Nothing 'コピーが失敗した場合に実行させる。 if Err.Number <> 0 Then MsgBox "インストーラーをコピーできませんでした。","コピーに失敗しました" WScript.Quit end if ↓正常にコピー完了した後の処理 これでは上手くいきませんでした。 どうすればエラー時の処理を追加できるでしょうか?

  • 全てのフォルダから最新ファイルを残し削除

    WindowsServer2008にて、 バックアップフォルダを定期的にリフレッシュ (最新以外を削除)するバッチを作りたいです。 CやVBなど、While文、関数のある言語でのプログラム経験がありますが バッチの方は不案内です。何卒ご教授くださいませ。 [処理内容] C:\testdir の配下に、サブフォルダdir1,dir2,dir3が存在します。 C:\testdir にバッチファイル、「dalete.bat」を配置。 実行するのはこの「dalete.bat」になります。 サブフォルダ dir1,dir2,dir3 の中のファイルは、 「no0.zip」,「no1.zip」,「no2.zip」と、規則的な名前です。 残したいのは「no0.zip」,「no1.zip」,「no2.zip」のうち、最新のファイル1個のみです。 [コード1] 次のようなプログラムを書きました。 まずは[dir1]フォルダのみの、 最新ファイル以外を削除するプログラムです。 ------------------------------------------ set L_FILE=C:\testdir\Delete.log echo %DATE% %TIME:~0,8% 処理開始 >> %L_FILE% REM 1フォルダ処理 cd dir1 REM 最新ファイルをリネーム保護 for /f "delims=" %%a in ('dir /b /o:d /a:-d') do set fname=%%a echo "%fname%" をリネーム保存 >> %L_FILE% copy "%fname%" "LASTFILE.zip" REM 他のファイルを削除 del "no*.zip" >> %L_FILE% REM リネーム保護を戻す ren "LASTFILE.zip" "%fname%" echo %DATE% %TIME:~0,8% 処理完了 >> %L_FILE% ------------------------------------------ 結果ログ 2013/11/29 2:17:15 処理開始 "no0.zip" をリネーム保存 2013/11/29 2:17:15 処理完了 ------------------------------------------ フォルダ[dir1]の中身は"no0.zip"のみで、期待した動きです。 [コード2] 次に、[dir1],[dir2],[dir3]全てのフォルダに対し、 最新以外のファイルを削除するコードを、以下のように書きました。 ------------------------------------------ set L_FILE=C:\testdir\Delete_all2.log echo %DATE% %TIME:~0,8% 処理開始 >> %L_FILE% REM フォルダ全てを処理 for /D %%i in (C:\testdir\*) do ( echo %%i フォルダ処理開始 >> %L_FILE% cd %%i REM 最新ファイルをリネーム保護(★) for /f "delims=" %%a in ('dir /b /o:d /a:-d') do set fname=%%a echo "%fname%" をリネーム保存 >> %L_FILE% copy "%fname%" "LASTFILE.zip" REM 他のファイルを削除 del "no*.zip" >> %L_FILE% REM リネーム保護を戻す ren "LASTFILE.zip" "%fname%" ) echo %DATE% %TIME:~0,8% 処理完了 >> %L_FILE% ------------------------------------------ 結果ログ 2013/11/29 2:22:03 処理開始 C:\testdir\dir1 フォルダ処理開始 "" をリネーム保存 C:\testdir\dir2 フォルダ処理開始 "" をリネーム保存 C:\testdir\dir3 フォルダ処理開始 "" をリネーム保存 2013/11/29 2:22:03 処理完了 ------------------------------------------ コード1で、動作確認が取れたコードですが、 ★部で、最新ファイルの取得に失敗しています。 結果、削除処理のみ期待通りに処理されサブフォルダ内の 全ファイルが削除されています。 どうすれば、全フォルダ、最新のみを残しループさせる事が出来るのでしょうか。 どうかお助けください。

  • vbaでフォルダの中のファイルを削除したい

    vbaでフォルダの中のファイルを削除したいのですが その場合は、 Sub フォルダの中身を全て削除する() Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO MyFolderName = ConsT_フォルダ名 & "\" MyFileName = Dir(MyFolderName & "\*.*") Do While MyFileName <> "" myFSO.DeleteFile MyFolderName & "\" & MyFileName MyFileName = Dir() Loop End With Set myFSO = Nothing End Sub の様にして、一つ一つループして消していかないとダメでしょうか? フォルダは残して、カラのフォルダにしたいです。

専門家に質問してみよう