FSO.BuildPath メソッド

本ページには広告が含まれています。

フォルダパスとフォルダまたはファイルの名前を結合したパス文字列を返します。

フォルダパスやファイルパスの文字列を生成するだけで、実際にフォルダ・ファイルが作成されるわけではありません。

パスからフォルダ名を取得するにはFSO.GetParentFolderName メソッド、ファイル名を取得するには、FSO.GetFileName メソッドを使用します。

フォルダが存在するかはFSO.BuildPath メソッド、ファイルが存在するかはFSO.FileExists メソッドで確認できます。

構文
  1. String = FileSystemObject.BuildPath( path, name )
引数
path 省略可
nameが追加される既存のパスを指定します。絶対パス・相対パスを指定することができ、既存のフォルダを指定する必要はありません。
name 省略可
既存のpathに追加される名前を指定します。
戻り値
フォルダパスとフォルダまたはファイルの名前を結合したパス文字列

使い方

指定されたpathnameを結合します。区切り文字の\があればそのまま結合し、なければpathの末尾に\を付与してからnameと結合します。

UWSC
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にフォルダ名、フォルダ名を含んだパスを指定することもできます。フォルダ名を指定しても末尾に\が付与されることはありません。

UWSC
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の先頭ともに\がある場合でも結合したときに\\と連続することはありません。

UWSC
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つは消えます。

UWSC
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を指定する例。

UWSC
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コマンドを使い以下のように記述します。

UWSC
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM path = FSO.BuildPath("D:\Desktop\", "sample.txt")

PRINT DOSCMD("fsutil file createnew " + path + " 0")

上記のプログラムは指定したフォルダが存在しない場合エラーとなるので、フォルダを生成する場合は以下のように記述します。

UWSC
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")

プログラム実行例

表示されているすべてのウィンドウのスクリーンショットを保存

UWSC
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の形式で取得します。

UWSC
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の形式で出力されます。

UWSC
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
使用関数
解説

デスクトップにフォルダを作成

UWSC
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
使用関数

パス文字列を生成します

UWSC
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("フォルダ名もしくはファイル名を入力してください。"))
使用関数

一時ファイルを作成・削除

UWSC
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ファイルのパスをコピーして実行します。

UWSC
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)
使用関数
解説

ファイルを開いているプロセスを調べる

UWSC
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に保存

UWSC
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を停止するホットキーを取得します。

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]]
[syntaxHighlight language="INI" title="UWSC.INI"][SET] Position=7,81 PlayHotKey=1,2 StopHotKey=2,2 RecHotKey=3,2 TrayHotKey=14,5 LunchMenuHotKey=14,0 MouseOrg=0 NotActive=0 StayOnTop=0 LogLines=2000 DefaultFont=, TaskTrayStart=1[/syntaxHighlight]
結果
プレーンテキスト
ALT+F1
使用関数
解説

関連記事

IE.Navigate メソッド
URLまたは絶対パスで指定されたファイルを開きます。
Shell.Explore メソッド
指定したディレクトリをエクスプローラで開きます。
FSO.GetExtensionName メソッド
指定したパスの最後のコンポーネントのファイル拡張子名を返します。
File.Path プロパティ (FSO)
指定したファイルのパスを返します。
getBitmap関数 (自作関数)
引数に指定したビットマップ画像のサイズ・幅・高さ・ビットの深さを配列で返します。
ShellLinkObject.Path プロパティ (Shell)
リンク オブジェクトへのパスを取得または設定します。
FSO.GetFolder メソッド
指定したパスのFolder オブジェクトを返します。