†REXXのどろぬま†
作成開始日 2025.05.05
最終更新日
なお、この例では、カレントディレクトリにあるhtm/htmlファイルの更新をチェックしている(サブディレクトリは対象外)。そして、ftpサーバ上の「/html」にある《カレントディレクトリと同名のディレクトリ》にファイルをアップしている。
たとえば、ローカルのファイルが「E:\MyHomepage\diary」にあれば、更新ファイルはftpサーバ上の「/htm/diary」にアップロードされる。アップロード先は変数dnameで設定しているので、必要に応じて書き換える。同様に、アップロードするファイルの拡張子は変数maskで変更可能。ただし、複数の「.」を含むファイル名には対応していない(対応させる事は難しくないが…)。
/*********************************************/
/* fud.cmd : ftp update uploader 2025.06.12 */
/* STREAM query datetime版 秒単位まで扱える */
/* upload対象ファイルは変数maskで設定 */
/*********************************************/
Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
Call SysLoadFuncs
/*** 初期設定 ***/
/*プログラムのパスとユーザー名、パスワードはそれぞれの環境合わせて設定する*/
ncftp = 'C:\.....\ncftpput -u username -p password'
/*同様に接続するサーバ名も各自の環境に合わせて設定する*/
srv = 'host.name.ne.jp'
/*アップロード先のディレクトリ:以下の例は/htmlの下のローカルと同名のディレクトリ*/
dname = '/html/'||filespec('N',DIRECTORY()) /* カレント・ディレクトリ */
updat = DIRECTORY()'\@update.dat' /* 更新日付データ */
mask = 'html htm jpg gif' /* upload対象ファイル */
/*** 更新日付のデータがない場合の処理:現在日時で仮作成 ***/
IF STREAM(updat,'C','query exist')='' THEN
Do
SAY '*** no update data file'
SAY '*** save current date&time'
SAY '*** edit :' updat
'@ECHO' date('Ordered') time('Normal')'>' updat
EXIT
End
/*** 更新日時データの読み込み ***/
rc=STREAM(updat,'C','O')
last_dt=LINEIN(updat)
rc=STREAM(updat,'C','C')
SAY last_dt '[last update]'
SAY '-------------------------------'
/*** メインルーチン ***/
rc=SysFileTree('*.*','file','FO')
files=''
Do n=1 to file.0
PARSE VAR file.n dmy '.' ext
IF POS(ext,mask)=0 THEN ITERATE
dt=STREAM(file.n,'C','query datetime')
PARSE VAR dt mm '-' dd '-' yy tm dmy /* dmyはバグ対策:必須 */
dt=yy'/'mm'/'dd tm
IF dt>last_dt THEN
Do
SAY dt FILESPEC('N',file.n)
files=files' 'file.n
End
End
IF files='' THEN DO; SAY '*** no upload files ***'; EXIT; END;
SAY '*** upload ok ? ***'
PULL st
IF st='N' THEN EXIT /* PULLの入力は大文字化される */
/* アップロードの実行 */
ncftp srv dname files
/*更新日時の書き込み*/
'@echo' date('Ordered') time('Normal')'>' updat
EXIT