Войти

Показать полную графическую версию : CMD проверка создания файла за (сегодня вчера) с созданием флагового файла


yamixon
12-03-2015, 12:41
Добрый день.
Прошу помощи в написания скрипта.
В папке c:\temp находятся файлы с именами SCAN_1_*(далее могут идти различные символы),именами SCAN_2_*(далее могут идти различные символы),именами SCAN_3_*(далее могут идти различные символы).

Необходимо проверить что файлы с этими именами создаются текущим(вчерашним(актуальность 24 часа)) днем. если все ок то формируются 3 файла 1.txt,2.txt,3.txt с информацией внутри: 1- все ок, 0- файл создан ранее 25часов

что я получил:

@echo off
:: Поиск самого молодого файла.

for /F "delims=" %%t in ('dir /b /od "c:\temp\SCAN_1_*.pdf"') do set Youngest=%%t
SetLocal

::путь и имя файла
set flag="c:\temp\%Youngest%"
del c:\temp\*.txt
echo %Youngest% > c:\temp\file_name.txt
if exist "%flag%" for %%A in ("%flag%") do echo %%~tA |>nul find "%date%" || >nul echo 0 > c:\temp\1.txt


::но файл создается в любом случае... где то тут ошибка.. уж 3 день маюсь не могу понять.
if exist "%flag%" for %%A in ("%flag%") do echo %%~tA |>nul find "%date%" || >nul echo 0 > c:\temp\1.txt

остальные проверки на 2 файла сделать по аналоги будет не проблема.
но файл создается в любом случае...

Georgio
13-03-2015, 04:50
Полный код (для обработки всех трёх групп файлов сразу):


@echo off& pushd "C:\temp"

>"file_name.txt" (for /l %%i in (1 1 3) do @for /f "tokens=1-3*" %%j in (
'for /f "skip=4 delims=" %%n in ('dir/a-d/-c/o-d/tc "SCAN_%%i_*.pdf"'^) do @echo %%n^& exit/b'
) do @echo %%m& for /f %%o in (
'mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(DateDiff("H","%%j"&Chr(32)&"%%k",Now))&Close()"'
) do @>"%%i.txt" (if %%o lss 25 (echo 0) else (echo 1)))

popd& exit/b 0


.



Удалять имеющиеся текстовые файлы не обязательно, так как они перезаписываются.

yamixon
13-03-2015, 08:38
что то не так,в папке 3 файла:
SCAN_1_8917_000 дата создания 13.03.2015 8.25
SCAN_2_8914_000 дата создания 11.03.2015 14.12
SCAN_3_8915_000 дата создания 12.03.2015 9.49
появляется файл
file_name в котором:
SCAN_1_8917_000.pdf
SCAN_2_8914_000.pdf
SCAN_3_8915_000.pdf
также появляются файлы 1,2,3 .txt

но в них нули, а должно быть в 1 и 3 файлы быть прописаны по единице.

Georgio
13-03-2015, 14:05
yamixon,


1) из Вашего первого сообщения очень трудно визуально получать нужную информацию, отредактируйте его, пожалуйста, используя теги "code" (см. символ "#"), деление на абзацы и убрав дублирование уже изложенного;

2) я, очевидно, поменял местами "0" и "1", то есть соответствующая строка должна выглядеть так: ) do @>"%%i.txt" (if %%o lss 25 (echo 1) else (echo 0)));

3) тестируйте код на оригинальной папке с файлами, а не на её копии, так как обычное копирование не может реплицировать дату создания.

yamixon
13-03-2015, 15:56
Спасибо за помощь.
есть нюанс в папке c:\temp
каждый день формируется по 3 файла SCAN_(1-3)_*
надо брать самый молодой файл из имеющихся
и его уже проверять когда он создан (не старше 25 часов)


) do @>"%%i.txt" (if %%o lss 25 (echo 1) else (echo 0)))

так тоже не работает.
файл 1,2,3.txt при разных комбинациях создания файла в таком варианте всегда 1
даже если файл создан 3-4 дня назад.

yamixon
17-03-2015, 08:40
все в порядке, действительно были проблеммы при копировании в темповую папку.
спасибо за помощь..




© OSzone.net 2001-2012