初版作成 2009.10.6
最終更新 2024.04.01
下記のスクリプトは以下のファイルのうち、 変更したファイルのみをコピーします。 ・home_dir/project/doc の中の指定された文書ファイル ・home_dir/project/c++builder6 の中の指定されたフォルダの中で 拡張子が cpp, h, dfm, exe, mak, res, dpr のファイル ・home_dir/project/vc++6 の中の指定されたフォルダの中で 拡張子が cpp, dsp, dsw, h のファイルと Debug ディレクトリの中の exe ファイル set objFs = CreateObject("Scripting.FileSystemObject") copied_fname = "" home_dir = "C:\Documents and Settings\user-name\My Documents" '----------- 文書ファイルをコピーする ------------- src_dir = home_dir + "\project\doc" dist_dir = "\\another-machine\user-name\project\doc" file_list = _ Array("aaa.doc","bbb.doc", _ "ccc.doc","ddd.doc") for each fname in file_list call ycopy(fname,src_dir,dist_dir) next '----------- Visual C++6 のファイルをコピーする -------- src_dir0 = home_dir + "\project\vc++6" folder_list = _ Array("dir1","dir2", _ "dir3","dir4") dist_dir0 = "\\another-machine\user-name\project\vc++6" for each dir in folder_list src_dir = src_dir0 + "\" + dir set objFolder= objFs.GetFolder(src_dir) dist_dir = dist_dir0 + "\" + objFolder.name ' .name で最後の部分を切り出す ' この場合は dist_dir = dist_dir0 + "\" + dir でも良いが、 ' .name の使い方の見本を見せるため、あえてこう記述する。 for each fname in objFolder.Files ' そのフォルダ内の全ファイル fname = Lcase(fname.Name) ' ファイル名 extname = LCase(objFs.GetExtensionName(fname)) ' 拡張子 if extname = "cpp" or extname = "dsp" or extname = "dsw" or _ extname = "h" then call ycopy(fname,src_dir,dist_dir) end if next src_dir = src_dir0 + "\" + dir + "\Debug" dist_dir = dist_dir0 + "\" + objFolder.name + "\Debug" fname = dir + ".exe" call ycopy(fname,src_dir,dist_dir) next '------------ C++Builder6 のファイルをコピーする ------------ src_dir0 = home_dir + "\project\c++builder6" folder_list = _ Array("folder1","folder2", _ "folder3","folder4) dist_dir0 = "\\another-machine\user-name\project\c++builder6" for each dir in folder_list src_dir = src_dir0 + "\" + dir set objFolder= objFs.GetFolder(src_dir) dist_dir = dist_dir0 + "\" + objFolder.name ' .name で最後の部分を切り出す ' この場合は dir_dir = dist_dir0 + "\" + dir でも良いが、 ' .name の使い方の見本を見せるため、あえてこう記述する。 for each fname in objFolder.Files ' そのフォルダ内の全ファイル fname = Lcase(fname.Name) ' ファイル名 extname = LCase(objFs.GetExtensionName(fname)) ' 拡張子 if extname = "cpp" or extname = "h" or extname = "dfm" or _ extname = "exe" or extname = "mak" or extname = "res" or _ extname = "dpr" then call ycopy(fname,src_dir,dist_dir) end if next next ' ------------------------------------ if copied_fname = "" Then MsgBox("コピーしたファイルはありません") Else MsgBox("コピーしたファイルは以下の通りです"&vbCR&vbCR&copied_fname&vbCR&"終了しました") End If '=============== 更新したファイルのみコピーする =============== ' ' コピーしたファイル名をグローバル変数 copied_fname に入れる ' dist_dir が存在しない場合は作成する ' sub ycopy(fname,src_dir,dist_dir) src_fname = src_dir + "\" + fname dist_fname = dist_dir + "\" + fname dist_dir2 = dist_dir + "\" ' MsgBox("fname = "&fname&" src_fname = "&src_fname&" dist_fname = "&dist_fname) if objFs.FileExists(src_fname) = False Then MsgBox("ファイル "&src_fname&" がありません。スキップします。") ' WScript.Quit exit sub else set objFile1 = objFs.GetFile(src_fname) end if if objFS.FolderExists(dist_dir2) = False Then ' コピー先フォルダがないときは objFS.CreateFolder(dist_dir2) ' 作成する end if if objFs.FileExists(dist_fname) = True Then ' コピー先にファイルがあるときは set objFile2 = objFs.GetFile(dist_fname) ' 日付を比較する date1 = objFile1.DateLastModified date2 = objFile2.DateLastModified diff_sec = DateDiff("s",date1,date2) if diff_sec < 0 then objFile1.copy dist_dir2 copied_fname = copied_fname+src_fname+vbCR end if else objFile1.copy dist_dir2 copied_fname = copied_fname+src_fname+vbCR end if End sub
' ' フォルダ内の Word ファイルを全て印刷する ' by T. Yabu ' 2020.7.26 初版作成 ' ' 参考サイト ' https://qiita.com/im_vyydk/items/c473b2cf5a004d86d6e1 ' https://bayashita.com/p/entry/show/33 Option Explicit Dim objFileSys Dim objFolder Dim objFile Dim strExtension Dim objDoc Dim objWord Dim objWshShell Dim cwd Dim filename ' ファイルシステムを扱うオブジェクトを作成 Set objFileSys = CreateObject("Scripting.FileSystemObject") ' カレントフォルダのオブジェクトを取得 Set objFolder = objFileSys.GetFolder(".") ' Word Set objWord = CreateObject("Word.Application") objWord.Visible = True Set objWshShell = WScript.CreateObject("WScript.Shell") cwd = objWshShell.CurrentDirectory 'FolderオブジェクトのFilesプロパティからFileオブジェクトを取得 For Each objFile In objFolder.Files '取得したファイルのファイル名を表示 strExtension = objFileSys.GetExtensionName(objFile.Name) If strExtension = "docx" Then filename = cwd + "\" + objFile.Name ' WScript.Echo filename Set objDoc = objWord.Documents.Open(filename) objDoc.PrintOut objDoc.Close End if Next objWord.Quit