1

ファイルがタイムスタンプ付きでダンプされるフォルダーがあります... filename_ver20130405121320.csv

今日の日付で 5 つのファイルが作成されたことを確認するバッチ スクリプトを作成したいと考えています。

今日の日付制限で for ループを使用する必要があると思います。

FOR /r %foldername% %%g IN (*.csv) DO (
    echo %%~nxg 
)

forfiles ステートメントを使用してファイルをリストします。ファイル名を表示するたびにカウンターと +=1 を使用できますか?

forfiles /S /P %foldername% /m *.csv /d 0 

ロジックは

if number of files in a foldername is less than 5 where file created is today

echo error! missing files

どんな助けでも大歓迎です

月 22/07/2013 としてマシンに返される日付 これを使用して日付を設定します

:: set date 
FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET dd=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET mm=%%B
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B
SET setDate=%dd%/%mm%/%yyyy%
4

3 に答える 3

0
@ECHO OFF
SETLOCAL enabledelayedexpansion
SET yyyy=2013
SET mm=07
SET dd=22
SET count=0
FOR /f %%g IN ('dir /b /a-d *%yyyy%%mm%%dd%????.csv') DO (
 SET filename=%%~ng
 SET filename=!filename:~-12,-4!
 if "!filename!"=="%yyyy%%mm%%dd%" SET /a count+=1
)
ECHO %count%
GOTO :EOF

yyyy, mm,を定数に設定しただけですdd。明らかに、必要に応じて日付デコーダーを突っ込むだけです。

必要に応じて、ファイルマスクの前にディレクトリ名を付けることもできます。結果のマスクにスペースやその他の混乱する文字がある場合は、ファイルマスク全体を「ウサギの耳」で囲みます。

重要: ファイルマスクは単なる一次フィルターです。たとえば(1桁が欠落している...)という名前のdirファイルがリストされるfilename_ver2013040512132.csvため、処理を伴う体操が引き続き必要になります。

また、比較的健全なファイル名を想定しています。!ファイル名に含まれている可能性が高く、コンニプションが発生する可能性があります。

于 2013-07-22T05:51:31.450 に答える
0

これは機能する可能性があります(テストされていません):yyyymmdd形式の日付のみをチェックするように編集されています

@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
set datestamp=%dt:~0,8%
for /f %%a in ('dir "*ver%datestamp%*.csv" /b /a-d^|find /c /v "" ') do (
if %%a LSS 5 echo files are missing
)
于 2013-07-22T10:29:37.090 に答える
0

私はこれを思いつきました、そしてそれは今のところうまくいくようです

for /f "tokens=2" %%I in ("%date%") do set today=%%I
for /f "tokens=5" %%G in ('dir %foldername% /a-d ^| find "%today%"') do (
set /a fileCounter += 1 
echo %%G
)

echo %fileCounter%
于 2013-07-22T05:59:05.170 に答える