从文件夹中的文件标题中提取日期

时间:2019-02-14 20:53:56

标签: batch-file

我在文件夹中有一组文件。名称的格式如下: 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 :(得分:0)

有一些操作变量的技术。理论上,您可以使用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
)