初版作成 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