2017-08-30 9 views
1

バッチファイルがあり、毎日特定のファイルに対して操作を実行する必要があります。今私は、ファイル名を言われてるように、タイムスタンプが含まれるように変更されますバッチファイルを使用して変数にファイル名を取得する

set today=%date:~-4,4%-%date:~-10,2%-%date:~-7,2% 
set filename=EZ_%today%.DAT 

:これまでのところ、ファイル名が、私はその日のために正確なファイル名を取得するには、以下を使用することができます意味パターンEX_2017-08-30.DATを踏襲していますEX_2017-08-30-231859.DATとなります。ただし、正確な時刻はあらかじめ分かっていません(特定のプロセスが完了すると設定されます)。

別のアプリケーションが使用するためにファイル名が外部ファイルに書き込まれているため、バッチファイル全体でワイルドカードを使用できないため、正確なファイル名を知る必要があります。とにかく、ワイルドカードで検索して結果の完全なファイル名を変数に格納できるのですか?

答えて

1

あなたEX_ *ファイルが入っている、あなたが行うことができますディレクトリ内のファイルを一覧表示することができた場合:

for %%i in (EX_%today%-*.DAT) do (
    set filename=%%i 
) 

最初の行には、日付と拡張子に一致するディレクトリ内のすべてのファイルを一覧表示し、それ最後のファイルをfilename変数に設定します。式に一致するファイルが複数ある場合は、警告をスローしないので注意してください。

ディレクトリをリストできない場合、唯一の可能性はbruteforceです。ファイル名には24 * 60 * 60の可能性しかありません。逆方向に進むと、タスクは通常真夜中に近いところで完了すれば、数回の反復で目的のファイルに到達するはずです。

+0

私はファイルを一覧表示するアクセス権を持っていると思うので、これはトリックを行うようです。私はこの答えを受け入れる前に、 'echo %% i'を' set filename = %% i'に変更することで、より直接的に質問に答えるようにすることを提案します(ファイル名を変数に設定するのではなくファイル名を設定します)。 – techturtle

+0

@techturtle:クール、私はちょうどそれをやった。私はこのアプローチの潜在的な問題を指摘しました。 –

関連する問題