案1:何ら中のプログラミング言語のftpライブラリを使って、ファイルのタイムスタンプを取得して、処理する。
やり方は、言語やライブラリ依存。
ただ、質問の書きぶりからして、こういう方面の解決を望んではいらっしゃらない気がします。
案2: ftpコマンドを実行して、ファイルの一覧を取得して、ftpコマンドのテキストファイルを作成して再度ftpコマンドを実行して取得する。
という方向で簡単に説明します。特に記述が無いので、「Windows標準のftpコマンド」前提で書きます。他のftpコマンドでも書式が異なるだけで同様のことは出来ます。また、サーバーはUnix/Linux系と想定します。これもWindowsであったらそれに合わせてコマンドを変えればいいだけです。
text
1open ftp.example.jp
2ユーザ名
3パスワード
4cd 目的ディレクトリ
5ls -ltr XXXXX.list
6quit
のようなファイルを作って、ftp -s:そのファイル名
で実行するとカレントディレクトリーにXXXXX.list
というファイルが出来て、目的ディレクトリの中のファイル一覧が、
text
1-rw-r--r-- 1 ftp ftp 41296198 Sep 29 08:41 gdb-15.2.tar.gz
2-rw-r--r-- 1 ftp ftp 95 Sep 29 08:41 gdb-15.2.tar.gz.sig
3-rw-r--r-- 1 ftp ftp 24332820 Sep 29 08:41 gdb-15.2.tar.xz
4-rw-r--r-- 1 ftp ftp 95 Sep 29 08:41 gdb-15.2.tar.xz.sig
のように入ります。
ls -ltr XXXXX.list
というFTPコマンドは、Linuxのシェルのコマンドラインで、ls -ltr > XXXXX.list
と実行するのと同じような意味です。引数の2番目は出力先のローカルファイル名なので、シェルコマンドラインのls -ltr *.tar > XXXXX.list
に相当するFTPコマンドはls "-ltr *.tar" XXX.list
のように引用符で囲みます。
ls
やdir
の出力書式はFTPサーバーのOSやFTPサーバーソフト依存ですので、実際の環境を見てそれを解析するプログラムを書きます。
1.フォルダ内で最新のファイルだけダウンロード
であれば、上記の前提だとバッチで書くとこんな感じですね。
少なくともUnix/Linuxであれば、ls -tr
でファイル名だけ古い順に並ぶので、ファイルに書かれた最後の行が目的ファイル名です。
CMD
1@echo off
2REM ftpコマンドファイルを作る
3(echo open ftp.example.jp
4echo ユーザ名
5echo パスワード
6echo cd 目的ディレクトリ
7echo ls -tr TMP2
8echo quit) > TMP1
9
10REM それを実行する
11ftp -s:TMP1
12
13REM 取得した一覧の最後の行を得る
14for /f "delims=" %%A in (TMP2) do set LASTFILE="%%A"
15
16REM ftpコマンドファイルを作る
17(echo open ftp.example.jp
18echo ユーザ名
19echo パスワード
20echo cd 目的ディレクトリ
21echo bin
22echo get %LASTFILE%
23echo quit) > TMP3
24
25REM それを実行する
26ftp -s:TMP3
27
28REM 一時ファイルを削除したければ削除する
29del TMP1 TMP2 TMP3
最新のタイムスタンプを持つ物がファイルじゃなくてディレクトリーだったりすると駄目なので、
そういう可能性がある場合は、リスト取得の際にecho ls "-tr *.txt" TMP2
のように拡張子を付けたワイルドカードにすると良いかと思います。前述のように引用符必須。
2.フォルダ内のデータで指定した保存日時にあてはまるもの
は、細かい要件が不明なのでサンプルコードは書きませんが、
上記のls -tr
をls -ltr
にしてタイムスタンプ付きで出力して、そこからタイムスタンプを手がかりにfindstr
コマンド等で目的ファイル名を取り出して、以下同様でしょうか。ちょっとバッチでは慣れてないと大変かも知れないので、PowerShellとかVBScriptで書くのを考えても良いかと思います。
Unix/Linuxのls -l
の日時表示は半年くらい以前と以降で書式が変わるので注意です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/11/06 00:37
2024/11/08 05:45