2017-02-03 12 views
0

Мне нужен пакетный скрипт, который проверяет диск (D :) для атрибута 'last modified' файлов * .czi (Carl Zeiss файлы изображений) и добавьте данные в файл на другом диске. Я попытался решение с помощью следующей строки:Получение атрибутов последнего измененного файла в каталоге, написанном в файле

FOR /F "delims=" %%I IN ('DIR %source%*.czi /A:-D /O:-D /T:W /B') DO COPY "%%I" > %target% 

, что дает мне последний файл, но он полностью копирует файл, который не является, что умным, так как они могут быть большими. Будучи биологом, я пощажу вас за мои отчаянные попытки, которые не сработали (проводились 4-5 часов). Я полагаю, что это может быть сделано мертвым легко, то есть, если вы знаете, как ... Любые хорошие предложения? Любой ответ будет оценен! Заранее спасибо.

+1

Определите, что вы подразумеваете под атрибутами, предпочтительно добавив эту информацию к своему вопросу. – Compo

+1

также каковы «данные», которые вы хотите добавить в целевой файл? Содержимое файла * .czi или атрибут 'last modified'? –

+1

Поскольку вы выполняете 'dir/o-d', ваша команда должна скопировать файл с первой модификацией в' target', скопировав каждый по очереди, начиная с ** последнего **. Вам нужно будет использовать '>>' вместо '>' для добавления данных. Файл «%% I» будет найденным именем файла, но копирование будет выполняться из каталога * current *, который не может быть «источником». Вы должны использовать ''% source %%% I "' для включения имени исходного каталога. Я бы предложил вам изменить свой вопрос, чтобы прояснить ситуацию. Вы просто хотите заменить «target» последним файлом или добавить к нему последний файл, или это первый файл? – Magoo

ответ

0

Ваш вопрос неясен, так что позвольте мне попробовать перефразировать:

Я думаю, что вы хотите, чтобы найти самый последний Модифицированный файл с расширением .CZI и скопировать только то, что новейший файл в какой-то целевого назначения.

Чтобы получить список всех файлов .CZI во всех подкаталогах, отсортировано по новейшему-файлу первого:

(for /f %a in ('dir *.CZI /s /b') do @echo %~ta %~fa) | sort 

Если первая строка этого вывода является файлом, который вы хотите, то все, что вам нужно сделать, это скопировать это один файл для вашей цели.

(и, пожалуйста, найдите время, чтобы написать подробные и понятные вопросы, поэтому мы можем обеспечить хорошие ответы)

0

Давайте предположим, что только время последнего изменения файла из нового файла разыскивается от всех * .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 командной строки и уже не на разборе для командной строки ,

%%I ссылается на имя файла в качестве выхода на DIR и %%~tI ссылки даты последнего изменения файла. Справка команды Для вывода вывода в окне командной строки for /? объясняет эти модификаторы.

Цикл выходит после первого вывода текста, перенаправленного в целевой файл, на который добавляется строка, если она уже существует из-за использования >>, а не только >.

Для примера файлов список следующая строка добавляется к C:\Temp\List.txt:

File "Newest Image.czi" last modified on 03.02.2017 17:13 

Для понимания используемых команд и как они работают, откройте окно командной строки, выполните там следующие команды, и читать целиком все страницы помощи, отображаемые для каждой команды очень тщательно.

  • dir /?
  • echo /?
  • for /?
  • goto /?
  • set /?

Смотрите также статью Microsoft Using command redirection operators.

 Смежные вопросы

  • Нет связанных вопросов^_^