DownloadFile関数

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

指定したURLのファイルをダウンロードします。第一引数にダウンロードするファイルのURL、第二引数にダウンロード先のフォルダ名、第三引数にダウンロードするファイル名を指定します。ダウンロードに成功した場合はTrue、失敗した場合はFalseを返します。

構文
  1. Boolean = DownloadFile( URL, folderspec, filename )
引数
URL 必須
ダウンロードするファイルのURL
folderspec 省略可
ダウンロード先のフォルダ名
filename 省略可
ダウンロードするファイル名
戻り値
TRUE
成功
FALSE
失敗

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   URL : ダウンロードするファイルのURL 
//   folderspec : ダウンロード先のフォルダ名 
//   filename : ダウンロードするファイル名 
// 【戻り値】
//   TRUE : 成功、FALSE : 失敗 
//////////////////////////////////////////////////
FUNCTION DownloadFile(URL, folderspec = "", filename = "")
	DIM Shell = CREATEOLEOBJ("Shell.Application")
	DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
	// フォルダ名
	IFB folderspec = "" THEN
		// 指定がなければダウンロードフォルダ
		folderspec = Shell.NameSpace("shell:Downloads").Self.Path
	ELSE
		// 指定したフォルダが存在しなければ
		IFB !FSO.FolderExists(folderspec) THEN
			PRINT "「" + folderspec + "」は存在しないフォルダです。"
			folderspec = Shell.NameSpace("shell:Downloads").Self.Path
		ENDIF
	ENDIF
	// ファイル名
	IFB filename = "" THEN
		// 指定がなければURLのファイル名をそのまま使う
		DIM Matches = reExecute(URL, ".+/(.+?)([\?#;].*)?$")
		filename = Matches.Item(0).SubMatches(0)
	ENDIF
	// フォルダ名とフォイル名を繋げてパスを生成
	DIM path = FSO.BuildPath(folderspec, filename)
	// 重複しないパスを生成
	path = uniqueFilename(path)
	// ダウンロードするコマンド
	DIM cmd = "bitsadmin.exe /TRANSFER htmlget <#DBL>" + URL + "<#DBL> <#DBL>" + path + "<#DBL>"
	// コマンドを実行
	DIM res = TRIM(DOSCMD(cmd))
	PRINT res
	DIM flg = FALSE
	// 成功時 : Transfer complete.
	// 失敗時 : Unable to complete transfer.
	IF POS("Transfer complete.", res) THEN flg = TRUE
	RESULT = flg
FEND

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列 
//   Pattern : 正規表現で使用するパターンを設定 
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse 
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse 
// 【戻り値】
//   正規表現で検索した結果をMatchesコレクションとして返します。 
//////////////////////////////////////////////////
FUNCTION reExecute(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
	DIM re = CREATEOLEOBJ("VBScript.RegExp")
	re.Pattern = Pattern
	re.IgnoreCase = IgnoreCase
	re.Global = Global
	RESULT = re.Execute(str)
FEND

//////////////////////////////////////////////////
// 【引数】
//   path : ファイルのパス 
// 【戻り値】
//   重複しないファイル名 
//////////////////////////////////////////////////
FUNCTION uniqueFilename(path)
	DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
	IFB FSO.FileExists(path) THEN
		DIM fol = FSO.GetParentFolderName(path)
		DIM filename = FSO.GetBaseName(path)
		DIM extension = FSO.GetExtensionName(path)
		DIM i = 2
		WHILE FSO.FileExists(FSO.BuildPath(fol, filename + " (" + i + ")." + extension))
			i = i + 1
		WEND
		RESULT = FSO.BuildPath(fol, filename + " (" + i + ")." + extension)
	ELSE
		RESULT = path
	ENDIF
FEND

解説

  1. 2行目
    UWSC
    	DIM Shell = CREATEOLEOBJ("Shell.Application")
    Shell オブジェクトを生成しShellに代入します。
  2. 3行目
    UWSC
    	DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
    FileSystemObject オブジェクトを生成しFSOに代入します。

関連記事

IEGETFRAME関数 (スクリプト関数)
IESETDATA関数 (スクリプト関数)
IESETDATA関数は、Web上に値を設定する関数です。第一引数にInternetExplorerオブジェクト、第二引数に設定する値、第三引数に値を設定するエレメントのNameもしくはタグ名を記述します。
BusyWait関数 (自作関数)
IEオブジェクトの読み込みが完了するのを待ちます。
IE.ExecWB メソッド
コマンドを実行します。
IE.GoForward メソッド
履歴リストの1つ後の項目に移動します。
IE.Refresh2 メソッド
指定されたリフレッシュレベルで現在表示されているファイルを再読み込みします。
IE.Stop メソッド
読込中のWebページやダウンロードのキャンセル、BGMやアニメーションの動的要素を停止します。
getIEObj関数 (自作関数)
引数に指定したタイトルまたはURLを含むIEオブジェクトを返します。戻り値はInternetExplorerオブジェクトです。
IE.Navigate メソッド
URLまたは絶対パスで指定されたファイルを開きます。
IE.Document プロパティ
ドキュメントオブジェクトを取得