Получение атрибутов последнего измененного файла в каталоге, записанном в файле
Мне нужен пакетный скрипт, который проверяет диск (D:) на наличие атрибута "последний измененный" *.czi файлов (файлов изображений Carl Zeiss) и добавляет данные в файл на другом диске. Я пробовал решения со следующей строкой:
FOR /F "delims=" %%I IN ('DIR %source%*.czi /A:-D /O:-D /T:W /B') DO COPY "%%I" > %target%
это дает мне последний файл, но он копирует весь файл, который не настолько умен, так как они могут быть большими. Как биолог, я избавлю вас от моих отчаянных попыток, которые не сработали (потратили 4-5 часов). Я полагаю, что это можно сделать очень легко, то есть, если вы знаете, как... Есть хорошие предложения? Любой ответ будет оценен! Заранее спасибо.
2 ответа
Ваш вопрос неясен, поэтому позвольте мне перефразировать его:
Я думаю, что вы хотите найти файл "Последние изменения" с расширением.CZI и скопировать только этот самый новый файл в какой-либо целевой каталог.
Чтобы вывести список всех файлов.CZI во всех подкаталогах, отсортированных сначала по newest-файлу:
(for /f %a in ('dir *.CZI /s /b') do @echo %~ta %~fa) | sort
Если первой строкой этого вывода является файл, который вы хотите, то все, что вам нужно сделать, это скопировать этот файл в вашу цель.
(и, пожалуйста, найдите время, чтобы написать подробные и четкие вопросы, чтобы мы могли дать хорошие ответы)
Давайте предположим, что требуется только время последнего изменения файла из новейшего файла из всех файлов *.czi в каталоге. C:\Temp
содержащий, например:
30.01.2017 08:13 First Listed.czi
28.01.2017 21:26 Oldest Image.czi
03.02.2017 17:13 Newest Image.czi
Код пакета для этой задачи может быть:
@echo off
set "Source=C:\Temp\"
set "Target=%Source%List.txt"
for /F "delims=" %%I in ('dir "%Source%*.czi" /A:-D /B /O:-D /T:W 2^>nul') do (
echo File "%%I" last modified on %%~tI>>"%Target%"
goto AfterLoop
)
:AfterLoop
Команда DIR ищет файлы *.czi в каталоге C:\Temp
и выводит список, отсортированный по времени последней модификации, в обратном порядке от самого нового к самому старому.
В случае отсутствия файла *.czi команда DIR выдаст сообщение об ошибке для обработки STDERR. Это выходное сообщение перенаправляется с 2>nul
к устройству NUL, чтобы подавить его, посредством чего оператор перенаправления >
должен быть сбежал сюда с ^
интерпретироваться как оператор перенаправления при выполнении командной строки DIR, а не при разборе командной строки FOR.
%%I
ссылается на имя файла как вывод DIR и %%~tI
ссылается на дату последнего изменения файла. Справка команды FOR для вывода путем запуска в окне командной строки for /?
объясняет эти модификаторы.
Цикл завершается после первого вывода текста, перенаправленного в целевой файл, к которому добавляется строка, если она уже существует из-за использования >>
вместо просто >
,
Для списка файлов примеров добавлена следующая строка C:\Temp\List.txt
:
File "Newest Image.czi" last modified on 03.02.2017 17:13
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
dir /?
echo /?
for /?
goto /?
set /?
Смотрите также статью Microsoft Использование операторов перенаправления команд.