2017-09-20 7 views
0

バッチスクリプトを作成しようとしています。バッチスクリプトを使用して、ファイルが読み込まれ、「doesnotexist」というテキストファイルにファイルの名前が追加されます。ファイルの形式は、バッチスクリプト:欠落しているファイルの一覧表示

13050122、13050216(yy、mm、dd、hh)です。これは、拾いたいものがあります。

だからここに私がこれまで持っているスクリプトです:

@echo on 
setlocal enableDelayedExpansion 
set year=13 
set "ext=.edt 
pause 
for /l %%a in (*501*,1,*531*) do ( 
    pause 
    IF EXIST "%%a" (
     ECHO "%%a" exists 
    ) ELSE (
     ECHO %%b doesn't exist >> file_pathway\doesnotexist.txt 
    ) 
) 

スクリプトが実行されますが、それはとdoesnotexist.txtファイルいっぱい:

0 doesn't exist 
%b doesn't exist 

私は行くだろうか、誰を知っています行方不明の日のリストについて。私はそれが理にかなったことを願う

事前に感謝します。

+1

;)は単にスクリプトの要求です。 – Compo

+0

純粋なバッチの場合は、[日付と時刻の関数](https://ritchielawrence.github.io/batchfunctionlibrary/#date-and-time-functions)、特に「DateToMJD」と「MJDToDate」を最初から最後まで繰り返すことをお勧めします日付と追加の 'for/l'ループがあります。 – LotPings

答えて

1

これは、この問題を解決するための非常に簡単な方法です:

@echo off 
setlocal EnableDelayedExpansion 

set /A "year=13, feb=28+^!(year%%4)" 
set i=0 
for %%a in (31 %feb% 31 30 31 30 31 31 30 31 30 31) do (
    set /A i+=1 
    set "dpm[!i!]=%%a" 
) 
set i=100 
for /L %%m in (1,1,12) do (
    set /A i+=1 
    for /L %%d in (1,1,!dpm[%%m]!) do (
     IF EXIST "%year%!i:~1!%%d*" (
     ECHO "%year%!i:~1!%%d" exists 
    ) ELSE (
     ECHO %year%!i:~1!%%d doesn't exist >> file_pathway\doesnotexist.txt 
    ) 
    ) 
) 

しかし、注意してください!この方法は2400年の2月に失敗します!あなたの質問可能うるう年を含め、いかなる特定の月にある日数を決定する方法を組み込むしようとせずに

+2

2400(これも2000)はOKですが、それは失敗する他の100倍です。 ^^(^!(年%% 4)^&(^!(^!(年%% 100))^)(^!(年%%) 400))) "' 'うるう年の正しい扱い(私は小さな事に時間を費やすのが楽しみです:))。 – CristiFati

関連する問題