0

バッチファイルの作成の概念を理解するのに苦労しています。.bat ファイルをスケジュールして、タイムスタンプ付きのファイルを毎日ダウンロードしたいと考えています。スケジュールされたタスクなどの設定は簡単です。コードを実行してファイル名の固定部分を取得し、適切なファイルを識別するために日付スタンプを追加しようとすると、問題が発生します。

私が行った調査から、コードで昨日の日付を YYYYMMDD 形式で取得することはまだできません。例えば。今日は 8 月 15 日です。バッチでファイルを 20130814 で識別したいと考えています。既存の (静的) ftp バッチ コードは次のとおりです。

option confirm off
option batch abort
open Ftp_name
lcd "U:\XXXX\YYYY\ZZZZ"

get "LoanSummary__Daily.xlsx"

バッチを検討したいのですが..

get "LoanSummary__Daily_" & YYYYMMDD & ".xlsx"

ありがとう。

4

1 に答える 1

1

FTP スクリプト内で動的にファイル名を作成できるとは思えません。ただし、ftp スクリプトを呼び出す前に、バッチ ファイルを使用して動的にビルドすることができます。

これを行う最も簡単な方法は、展開が遅延された環境変数として表される変数部分を持つ ftp スクリプト テンプレートを作成することです。たとえば、!yesterday!昨日の日付に展開される環境変数を参照できます。単純な FOR /F ループがテンプレートを読み取り、各行を新しい ftp スクリプト ファイルに書き込みます。変数は、遅延展開が有効になっている限り、プロセスで自動的に展開されます。

Windows バッチ ファイルで昨日の日付を取得することは、重要な作業です。SOや他のサイトに投稿された多くの方法があります。ほとんどの方法にはさまざまな制限がありますが、最も一般的なのは、ロケールの日付形式の違いによる問題の影響を受けやすいことです。getTimestamp.bat私は、ロケールに関係なく、XP 以降のすべての Windows プラットフォームで動作する、というハイブリッド バッチ/JScript ユーティリティを使用しています。これは純粋なスクリプトであるため、.exe のダウンロードは必要ありません。getTimestamp.batはこちらから入手できます

getTimestamp.bat現在のディレクトリ、またはさらに良いことに、PATH 内のどこかにあると仮定すると、次のように動作するはずです。

getYesterday.ftp.template

option confirm off
option batch abort
open Ftp_name
lcd "U:\XXXX\YYYY\ZZZZ"

get "LoanSummary__Daily_!yesterday!.xlsx"

getYesterday.bat

@echo off
setlocal enableDelayedExpansion

:: Get yesterday's date in YYYYMMDD format
call getTimestamp -od -1 -f {yyyy}{mm}{dd} -r yesterday

:: Create a temporary ftp script that uses the "yesterday" date
>temp.ftp (for /f "delims=" %%L in (getYesterday.ftp.template) do echo %%L)

:: Now simply invoke your ftp client using the temp script, something like
ftp -s:temp.ftp ...

:: Delete the temporary ftp script
del temp.ftp
于 2013-08-15T17:06:50.167 に答える