「Account_data_yyyymmdd.csv」のように日付と時刻が追加されたcsvファイルのリストがあり、タイムスタンプとともにソースディレクトリに毎日追加されます。最新のファイル(「Account_data_2020_08_05.csv」)を識別し、変数に値を設定する必要があります。だから私はそれを引数として渡すことができます
ソースディレクトリ内のファイル
タイムスタンプに基づいて最近配置されたファイルを見つけて、別のバッチプロセスを呼び出すための入力として渡す必要があります。強調表示されたテキストは、バッチファイルへの引数です。タイムスタンプに基づいて最新のファイルを検索し、その引数として渡す方法
echo "start"
call process.bat "C:\CSVDataLod" AccntDataloadprocess ***"dataAccess.name=C:\SourceDir\ Account_data_%year%_%month%_%date%.csv"***
ファイル名に最新の日付が含まれるCSVファイルの名前を取得する最も簡単で最速の方法は、コマンドDIRを使用/O-N
して、CSVファイル名の出力を名前の逆順で取得することです。この場合、最新の名前のファイル名がDIRによって最初に出力されます。DIRの出力は、FORでキャプチャして処理する必要があります。FORのループはによって最初のファイル名の出力を持つ他のバッチファイルを実行した後に終了するDIR。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "FileFound="
set "FileNamePattern=Account_data_20??_??_??.csv"
if /I "%~x1" == ".csv" set "FileNamePattern=%~nx1"
for /F "delims=" %%I in ('dir "C:\SourceDir\%FileNamePattern%" /A-D /B /O-N 2^>nul') do (
echo Processing file %%I ...
call process.bat "C:\CSVDataLod" AccntDataloadprocess "dataAccess.name=C:\SourceDir\%%I"
if /I not "%~1" == "/A" goto EndBatch
set "FileFound=1"
)
if not defined FileFound echo There is no file "%FileNamePattern%" in directory "C:\SourceDir".
:EndBatch
endlocal
コマンドプロンプトを開いて実行することをお勧めします
dir "C:\SourceDir\Account_data_20??_??_??.csv" /A-D /B /O-N
次に、FORによって処理される行がわかります。次の実行
dir "C:\SourceDir\Account_data_20??_??_??.csv" /A-D /B
dir "C:\SourceDir\Account_data_20??_??_??.csv" /A-D /B /ON
DIRが特定の順序を指定せずにCSVファイル名を出力する方法を確認します。その結果、ファイルシステムから返されるファイル名が出力され、アルファベットの逆順ではなくアルファベット順に明示的に並べられます。
ファイルシステムNTFSは、ワイルドカードパターンと一致するファイル名のリストをローカル固有のアルファベット順に返しますが、FAT16、FAT32、exFATなどのFATファイルシステムは、まったく順序付けされていないファイル名を返します。実際には、すべてのファイルシステムは、ファイルシステムのテーブルに格納されている順序でファイル名を返します。ファイルシステムは、ファイルシステムのテーブルにファイル名を追加する方法について、まったく異なる方法を使用します。FATファイルシステムは常にディレクトリのテーブルの最後に新しいファイル名を追加しますが、NTFSはローカル固有のアルファベット順の並べ替えアルゴリズムを使用してディレクトリのテーブルに新しいファイル名を挿入します。
の説明については、コマンドリダイレクト演算子の使用に関するMicrosoftのドキュメントをお読みください2>nul
。リダイレクト演算子には、>
キャレット文字でエスケープしなければならない^
上FORのWindowsコマンド・インタプリタは、コマンドを実行する前に、このコマンドラインを処理するときにリテラル文字として解釈されるように、コマンドラインFORた組み込み実行dir
してバックグラウンドで起動別々のコマンド処理におけるコマンドライン%ComSpec% /c
とコマンドラインを内 '
の追加の引数として追加されます。
編集:
バッチファイルを引数として、/a
または/A
引数として実行して、ワイルドカードパターンに一致するすべてのCSVファイルを、最新のものだけでなく、最新のものから古いものへと処理できます。バッチファイルは.csv
、ソースディレクトリ内のファイルの名前で実行して、最新のCSVファイルの代わりにこの特定のCSVファイルを処理することもできます。
使用するコマンドとその動作を理解するには、コマンドプロンプトウィンドウを開き、そこで次のコマンドを実行して、各コマンドに表示されるすべてのヘルプページを注意深く読んでください。
call /?
dir /?
echo /?
endlocal /?
for /?
goto /?
setlocal /?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加