Parse Модифицированные Дата и Время - PullRequest
0 голосов
/ 04 июня 2011

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

Это код скрипта:

for %%v in (*.html) do ( 
    echo %%~tv
)

Вопрос в том, как мне разобрать результат на две переменные. Каждый для даты и времени подряд.

Пожалуйста, совет.

С уважением,

Дино

1 Ответ

3 голосов
/ 04 июня 2011

Если бы я сам решил такую ​​проблему, я бы сделал следующее:

  1. Я бы запустил ваш скрипт, чтобы посмотреть, какой вывод он выдает. Если честно, у меня есть , который запускает этот скрипт, и вот что у меня есть:

    12/15/2009 08:54 AM
    12/15/2009 09:30 AM
    05/31/2011 07:35 PM
    12/02/2009 05:53 PM
    12/19/2009 09:33 PM
    04/10/2010 02:07 PM
    11/23/2010 03:21 PM
    01/06/2010 12:03 PM
    
  2. Моим следующим шагом будет определение (визуально) какой части каждой строки является дата, а какой - время, я имею в виду, с какой позиции начинаются подстроки и какова их длина.

    В моем случае, похоже, что ... (где мой правитель?)

              1    1
    0    5    0    5    
    ||||||||||||||||||||
    04/10/2010 02:07 PM
    

    Ах да, позиция 0, длина 10 для даты и позиция 11, длина 8 для времени. (Как видите, для строк в пакетных скриптах у меня есть специальная линейка, которая начинается с 0.)

  3. Теперь, когда я знаю, где найти дату и время в выходных данных, я могу извлечь их соответствующим образом. Но сначала мне понадобится переменная для всей строки, потому что извлечение применяется к переменным среды, а не к переменным цикла. Здесь:

    SETLOCAL EnableDelayedExpansion
    FOR %%v IN (*.html) DO ( 
      SET datetime=%%~tv
      ECHO !datetime:~0,10!
      ECHO !datetime:~11,8!
    )
    ENDLOCAL
    

    Возможно, вы заметили, что помимо введения переменной я также добавил включение отложенного расширения (переменных). Это необходимо, поскольку при немедленном расширении, например, так:

    FOR %%v IN (*.html) DO ( 
      SET datetime=%%~tv
      ECHO %datetime:~0,10%
      ECHO %datetime:~11,8%
    )
    

    это не будет работать . Дело в том, что выражения %datetime:…% будут оцениваться до цикла, и, следовательно, будут генерировать пустые строки. (Эта особенность поведения применима ко всем случаям, когда в скобках есть несколько команд, будь то цикл FOR, команда IF или IF..ELSE или даже просто перенаправление, примененное к набору команд, как ><em>file</em> (<em>commands</em>).)

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

    SETLOCAL EnableDelayedExpansion
    FOR %%v IN (*.html) DO ( 
      SET datetime=%%~tv
      SET fdate=!datetime:~0,10!
      SET ftime=!datetime:~11,8!
      :: now do whatever you like with !fdate! and !ftime!
      …
    )
    ENDLOCAL
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...