27.02.2012 08:00
Предлагаю для решения задачку (только для командного интерпретатора и штатных команд Windows, скажем, с ХР). Суть задачки простая. Есть директория, в ней все время появляются файлы. Необходимо выполнить какую-то команду по отношению к имеющимся в данный момент файлам (например, type), а потом удалить их (а не все, которые уже будут иметься на момент окончания работы). Мне лично этот блок не нужен, но в скриптах, например, передачи файликов на ftp он пригодится.
27.02.2012 12:02
Рабочий доп. батник для внешнего транспорта почтового сервера СМ.
В принципе вся логика в одной строке: FOR /F "usebackq" %%I IN (`dir ...
Файлы строятся по маске в порядке записи, старые сначала, без подкаталогов.

В каталоге входящих последовательно разархивирует/удаляет,
в исходящих пишет текущий список в файл и затем отрабатывает архиватор по нему.

Код:
@echo off
rem Архивация/разархивация почтовых пакетов для серверов магазинов

set base=DBTEST
set slave_ftp=E:\DBTEST.FTP

set file_mask=*.xml
set arc_mask_to=to_%base%_*.rar
set arc_mask_from=from_%base%_*.rar

SETLOCAL ENABLEDELAYEDEXPANSION

:loop

rem Разархивация входящих
echo %DATE% %TIME:~,8%   *** %slave_ftp%\in\ ***
if exist %slave_ftp%\in\%arc_mask_to% ( 
 FOR /F "usebackq" %%I IN (`dir /A:-D /O:D /T:W /B %slave_ftp%\in\%arc_mask_to%`) DO ( 
   echo %slave_ftp%\in\%%I
   rar.exe e %slave_ftp%\in\%%I *.* -inul -y %slave_ftp%\in\ 
   if "!errorlevel!"=="0" ( 
    del /q %slave_ftp%\in\%%I 
   ) else ( 
    echo -== Rar error #!errorlevel! ==-
   ) 
 )
)

cls
timeout 60 >CON
echo.

rem Архивация исходящих
echo %DATE% %TIME:~,8%   *** %slave_ftp%\out\ ***
if exist %slave_ftp%\out\%file_mask% ( 
 FOR /F "usebackq" %%I IN (`dir /A:-D /O:D /T:W /B %slave_ftp%\out\%file_mask%`) DO ( 
   rem Добавление в список файлов для архивации
   echo %slave_ftp%\out\%%I >>%temp%\smpost_%base%_out.lst
   echo %slave_ftp%\out\%%I
 )
 if exist %temp%\smpost_%base%_out.lst ( 
   rar.exe m %slave_ftp%\out\from_%base%_ @%temp%\smpost_%base%_out.lst -y -ep -m5 -s -inul -agYYMMDD-HHMMSS
   if not "!errorlevel!"=="0" ( 
    echo -== Rar error #!errorlevel! ==-
   ) 
   dir /B %slave_ftp%\out\!arc_mask_from!
   del /q %temp%\smpost_%base%_out.lst >nul
 ) 
) 
echo.

goto loop

ENDLOCAL
27.02.2012 18:35
Код:
for /f %%i in ('dir *.* /A-D /B /O-D') do set WORK_FILE=%%i
type %WORK_FILE%
del /Y %WORK_FILE%>nul
для предлагаемого примера действий. С указанными ключами в dir, в обработку будет браться самый "старый" по времени создания файл.
Часовой пояс GMT +3, время: 17:16.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.