目次
フォルダパスとフォルダまたはファイルの名前を結合したパス文字列を返します。
フォルダパスやファイルパスの文字列を生成するだけで、実際にフォルダ・ファイルが作成されるわけではありません。
パスからフォルダ名を取得するにはFSO.GetParentFolderName メソッド、ファイル名を取得するには、FSO.GetFileName メソッドを使用します。
フォルダが存在するかはFSO.BuildPath メソッド、ファイルが存在するかはFSO.FileExists メソッドで確認できます。
- 構文
- String = FileSystemObject.BuildPath( path, name )
- 引数
- path 省略可
- nameが追加される既存のパスを指定します。絶対パス・相対パスを指定することができ、既存のフォルダを指定する必要はありません。
- name 省略可
- 既存のpathに追加される名前を指定します。
- 戻り値
- フォルダパスとフォルダまたはファイルの名前を結合したパス文字列
使い方
指定されたpathとnameを結合します。区切り文字の\があればそのまま結合し、なければpathの末尾に\を付与してからnameと結合します。
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
PRINT FSO.BuildPath("D:\Desktop\", "sample.txt")
PRINT FSO.BuildPath("D:\Desktop", "sample.txt")
- 結果
D:\Desktop\sample.txt D:\Desktop\sample.txt
nameにフォルダ名、フォルダ名を含んだパスを指定することもできます。フォルダ名を指定しても末尾に\が付与されることはありません。
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
PRINT FSO.BuildPath("D:\Desktop\", "test")
PRINT FSO.BuildPath("D:\Desktop\", "test\sample.txt")
PRINT FSO.BuildPath("D:\Desktop", "test\sample.txt")
- 結果
D:\Desktop\test D:\Desktop\test\sample.txt D:\Desktop\test\sample.txt
pathの末尾、nameの先頭ともに\がある場合でも結合したときに\\と連続することはありません。
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
PRINT FSO.BuildPath("D:\Desktop\", "\test\sample.txt")
- 結果
D:\Desktop\test\sample.txt
pathの末尾またはnameの先頭に\が2つ以上ある場合は、\が1につなることはありません。
pathの末尾またはnameの先頭ともに\がある場合、\が1つは消えます。
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
PRINT FSO.BuildPath("D:\Desktop\\", "\sample.txt")
PRINT FSO.BuildPath("D:\Desktop\\", "sample.txt")
PRINT FSO.BuildPath("D:\Desktop\", "\\sample.txt")
PRINT FSO.BuildPath("D:\Desktop", "\\sample.txt")
- 結果
D:\Desktop\\sample.txt D:\Desktop\\sample.txt D:\Desktop\\sample.txt D:\Desktop\\sample.txt
特殊フォルダを指定する場合、Shell.NameSpace メソッドを使うことで動的にパスを生成することができます。以下はデスクトップのsample.txtを指定する例。
CONST ssfDesktop = 0
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
PRINT FSO.BuildPath(Shell.NameSpace(ssfDesktop).Self.Path, "sample.txt")
- 結果
D:\Desktop\sample.txt
生成したパスに空のファイルを作成するにはコマンドプロンプトのfsutilコマンドを使い以下のように記述します。
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM path = FSO.BuildPath("D:\Desktop\", "sample.txt")
PRINT DOSCMD("fsutil file createnew " + path + " 0")
上記のプログラムは指定したフォルダが存在しない場合エラーとなるので、フォルダを生成する場合は以下のように記述します。
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM path = FSO.BuildPath("D:\Desktop\test", "sample.txt")
CreateFolders(FSO.GetParentFolderName(path))
PRINT DOSCMD("fsutil file createnew " + path + " 0")
プログラム実行例
表示されているすべてのウィンドウのスクリーンショットを保存
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM folderspec = "D:\Desktop\Screenshot"
IF FSO.FolderExists(folderspec) = FALSE THEN FSO.CreateFolder(folderspec)
FOR n = 0 TO GETALLWIN() - 1
DIM ID = ALL_WIN_ID[n]
IFB STATUS(ID, ST_VISIBLE) = TRUE
DIM filename = ID + "_" + STATUS(ID, ST_TITLE)
filename = PathCleanupSpec(filename)
DIM path = FSO.BuildPath(folderspec, filename)
path = uniqueFilename(path)
SAVEIMG(path, id)
ENDIF
NEXT
システム起動時間を取得
システムの起動時間をyyyy/mm/dd, hh:nn:ssの形式で取得します。
HASHTBL INFO
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM filename = uniqueFilename(FSO.BuildPath(GET_CUR_DIR, "SYSTEMINFO.csv"))
FID = FOPEN(filename, F_READ OR F_WRITE)
FPUT(FID, DOSCMD("systeminfo /FO CSV"))
FCLOSE(FID)
FID = FOPEN(filename, F_READ OR F_WRITE)
FOR col = 0 TO 33
INFO[FGET(FID, 1, col)] = FGET(FID, 2, col)
NEXT
FCLOSE(FID)
FSO.DeleteFile(filename)
PRINT INFO["システム起動時間"]
2019/12/21, 15:53:56
Windowsの稼働時間を取得
Windowsシステムの起動時間から稼働時間を求めます。
結果はd:hh:nn:ssの形式で出力されます。
HASHTBL INFO
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM filename = uniqueFilename(FSO.BuildPath(GET_CUR_DIR, "SYSTEMINFO.csv"))
DIM FID = FOPEN(filename, F_READ OR F_WRITE)
FPUT(FID, DOSCMD("systeminfo /FO CSV"))
FCLOSE(FID)
FID = FOPEN(filename, F_READ OR F_WRITE)
DIM col = 1
WHILE FGET(FID, 1, col) <> ""
INFO[FGET(FID, 1, col)] = FGET(FID, 2, col)
col = col + 1
WEND
FCLOSE(FID)
FSO.DeleteFile(filename)
DIM startupTime = INFO["システム起動時間"]
DIM date1 = dateValue(startupTime) + timeValue(startupTime)
DIM date2 = uwscToSerial(GETTIME())
PRINT INT(date2 - date1) + ":" + text(date2 - date1, "hh:mm:ss")
0:08:16:46
デスクトップにフォルダを作成
CONST ssfDesktop = 0
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDesktop)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
WITH FSO
.CreateFolder(.BuildPath(Folder.Self.Path, INPUT("デスクトップにフォルダを作成します。<#CR>フォルダ名を入力してください。")))
ENDWITH
パス文字列を生成します
CONST ssfDesktop = 0
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDesktop)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
PRINT FSO.BuildPath(Folder.Self.Path, INPUT("フォルダ名もしくはファイル名を入力してください。"))
一時ファイルを作成・削除
CONST TemporaryFolder = 2
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM Folder = FSO.GetSpecialFolder(TemporaryFolder)
DIM folderspec = Folder.Path
DIM filename = FSO.GetTempName
DIM path = FSO.BuildPath(folderspec, filename)
PRINT path
DIM TextStream = FSO.CreateTextFile(path)
// 現在の日時をファイルに書き込む
TextStream.WriteLine(now())
TextStream.Close
// Tempファイルを削除
// FSO.DeleteFile(path)
FUNCTION now()
GETTIME()
RESULT = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2
FEND
D:\TMP\rad83BB3.tmp
csvファイルをHTMLのテーブルデータにする(csvToHTML)
CSVのデータをHTML(テーブル)に変換します。
クリップボードにcsvファイルのパスをコピーして実行します。
CONST TemporaryFolder = 2
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM Folder = FSO.GetSpecialFolder(TemporaryFolder)
DIM folderspec = Folder.Path
DIM name = FSO.GetTempName
DIM TempPath = FSO.BuildPath(folderspec, name)
DIM path = GETSTR(0)
DIM FID = FOPEN(path, F_READ)
DIM FID2 = FOPEN(TempPath, F_READ OR F_WRITE)
FPUT(FID2, "<table>", F_ALLTEXT)
FOR row = 1 TO FGET(FID, F_LINECOUNT)
DIM col = 1
FPUT(FID2, "<#TAB><tr>", 0)
WHILE FGET(FID, row, col) <> ""
FPUT(FID2, "<#TAB><#TAB><td>" + (FGET(FID, row, col)) + "</td>", 0)
col = col + 1
WEND
FPUT(FID2, "<#TAB></tr>", 0)
NEXT
FPUT(FID2,"</table>", 0)
FCLOSE(FID)
FCLOSE(FID2)
FID = FOPEN(TempPath, F_READ)
SENDSTR(0, FGET(FID, F_ALLTEXT))
PRINT FGET(FID, F_ALLTEXT)
FCLOSE(FID)
ファイルを開いているプロセスを調べる
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
CONST TemporaryFolder = 2
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
WITH FSO
DIM Folder = .GetSpecialFolder(TemporaryFolder)
DIM folderspec = Folder.Path
DIM filename = .GetTempName
DIM path = .BuildPath(folderspec, filename)
ENDWITH
DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.FileRun()
DIM ID = GETID("ファイル名を指定して実行", "#32770")
SENDSTR(ID, "cmd /c openfiles /query /fo CSV > " + path)
CLKITEM(ID, "OK", CLK_BTN)
SLEEP(0.500)
REPEAT
SLEEP(0.100)
UNTIL GETID("C:\WINDOWS\system32\cmd.exe", "ConsoleWindowClass") = -1
DIM FID = FOPEN(path, F_READ)
TRY
DIM ID2 = GETID("使用中", "OperationStatusWindow")
GETITEM(ID2, ITM_ACCTXT, 1)
DIM str = ALL_ITEM_LIST[1]
DIM sep = IIF(POS("フォルダー", STATUS(ID2, ST_TITLE)) <> 0, "\", "")
DIM msg = "■" + str + "<#CR>"
FOR r = 5 TO FGET(FID, F_LINECOUNT)
IF POS("\" + str + sep, FGET(FID, r, 3)) <> 0 THEN
msg = msg + "ID:" + FGET(FID, r, 1) + ", プロセス名:" + FGET(FID, r, 2) + "<#CR>"
ENDIF
NEXT
FCLOSE(FID)
REPEAT
FUKIDASI(TRIM(msg))
SLEEP(0.100)
UNTIL GETID("使用中", "OperationStatusWindow") = -1
FINALLY
FSO.DeleteFile(path)
ENDTRY
楽天銀行定期預金の金利をExcelに保存
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("https://rbweb.rakuten-bank.co.jp/REF/main/fis/BasicTimeDepositInterestRate.html?PageID=BasicTimeDepositInterestRatePresentationLogicBean")
BusyWait(IE)
DIM elements = IE.document.getElementsByTagName("table")
DIM element = elements.Item(0)
DIM arr[-1][-1]
getTableData(element, arr)
IE.Quit
DIM Excel = XLOPEN()
XLSETDATA(Excel, arr, "A1")
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM path = uniqueFilename(FSO.BuildPath(GET_CUR_DIR, "楽天銀行定期預金金利.xlsx"))
XLCLOSE(Excel, path)
UWSC.INIよりUWSCを再生するホットキーを取得
Roamingフォルダ(C:\Users\username\AppData\Roaming\)のUWSCフォルダにあるUWSC.INIを読み込み、UWSCを停止するホットキーを取得します。
DIM modifers[] = "CTRL", "WIN", "ALT", "SHIFT+CTRL", "SHIFT+ALT", "CTRL+ALT"
DIM keys[] = "SPACE", "F1", "F2", "F3", "F4", "F9", "F10", "F11", "F12", "↑", _
"↓", "→", "←", "Q", "W", "E", "R", "A", "S", "D", _
"F", "End", "Home", "F5", "F6", "F7", "F8", "T", "Y", "U", _
"I", "O", "P", "G", "H", "J", "K", "L", "Z", "X", _
"C", "V", "B", "N", "M", "1", "2", "3", "4", "5", _
"6", "7", "8", "9"
DIM WshShell = CREATEOLEOBJ("WScript.Shell")
DIM str = READINI("SET", "PlayHotKey", WshShell.ExpandEnvironmentStrings("%AppData%\UWSC\UWSC.INI"))
DIM nums = SPLIT(str, ",")
PRINT modifers[nums[1]] + "+" + keys[nums[0]]
ALT+F1
関連記事
- IE.Navigate メソッド
- URLまたは絶対パスで指定されたファイルを開きます。
- Shell.Explore メソッド
- 指定したディレクトリをエクスプローラで開きます。
- FSO.GetExtensionName メソッド
- 指定したパスの最後のコンポーネントのファイル拡張子名を返します。
- File.Path プロパティ (FSO)
- 指定したファイルのパスを返します。
- getBitmap関数 (自作関数)
- 引数に指定したビットマップ画像のサイズ・幅・高さ・ビットの深さを配列で返します。
- ShellLinkObject.Path プロパティ (Shell)
- リンク オブジェクトへのパスを取得または設定します。
- FSO.GetFolder メソッド
- 指定したパスのFolder オブジェクトを返します。