Получение атрибутов последнего измененного файла в каталоге, записанном в файле

Мне нужен пакетный скрипт, который проверяет диск (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 Использование операторов перенаправления команд.

Другие вопросы по тегам