Извлекать даты из заголовков файлов в папке - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть группа файлов в папке.Имена отформатированы так:credit_MM-DD-YYYY, где MM-DD-YYYY - дата.MM - номер месяца (от 01 до 12), DD - день месяца (от 01 до 31), а YYYY - год, например 2019. Для каждого файла мне нужно извлечь дату, переформатировать дату и передать отформатированную датув качестве параметра для другого командного файла, который будет фильтровать данные в файле, из которого я извлек исходную дату.Моя проблема в том, что я не знаю, как получить дату из заголовка файла и в переменную, которую я могу проанализировать.У меня работает пакетный файл фильтрации, так что это не проблема.Я не хочу использовать стороннюю утилиту, даже если она бесплатна.Я ценю любую помощь.Если то, что я хочу сделать, невозможно, просто дайте мне знать.Спасибо за ваше время.

Я могу сделать все, что мне нужно, если я могу просто получить дату из имени файла в переменную.Я провел пару дней, просматривая этот сайт и другие, но не могу найти ответ.Ниже приведена краткая версия, которую я пробовал.PS Я не командный файл про

  set local
  setlocal EnableDelayedExpansion
  for %%i IN (c:\MyFolder\*credit_*.*) DO (
     echo i=%%i
     set b_name=%%i
     echo b %b_name%
  )
 echo done
 endlocal

What I get is:

  echo i=c:\MyFolder\credit_02-14-2019.txt
  set b_name=c:\MyFolder\credit_02-14-2019.txt
  echo b

  ...and on and on and on until the last file in the folder is shown...

  echo done

1 Ответ

0 голосов
/ 15 февраля 2019

Существует несколько методов манипулирования переменной.Теоретически можно использовать команду FOR /F для разделения имени файла, используя подчеркивание и дефис в качестве разделителей.Но так как дата - это последние 10 позиций имени файла, вы можете использовать функцию подстроки команды SET.Я прокомментировал код, где я чувствовал, что это нужно объяснить.

@echo off

REM Get a list of files in the folder.
for %%G IN (c:\MyFolder\*credit_*.*) DO (
    REM Set a variable to the base file name
    set "base=%%~nG"
    REM We are inside a parentheses code block. Must use delayed expansion.
    REM All environmental variables must be reference with exclamation points
    setlocal EnableDelayedExpansion
    REM Last 10 bytes are the date in the base file name
    REM Using negative substring expansion
    set "yyyy=!base:~-4,4!"
    set "mm=!base:~-10,2!"
    set "dd=!base:~-7,2!"
    echo File Path:%%~fG
    echo File Name:%%~nxG
    echo File Year:!yyyy!
    echo File Month:!mm!
    echo File Day:!dd!
    endlocal
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...