获取文件名中包含最新日期的 CSV 文件名的最简单和最快的方法是使用命令DIR和选项/O-N
来获取按名称以相反顺序排列的 CSV 文件名输出。在这种情况下,具有最新名称的文件名首先由DIR输出。必须使用FOR捕获和处理DIR的输出。在运行具有由DIR输出的第一个文件名的另一个批处理文件后退出FOR循环。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "FileFound="
set "FileNamePattern=Account_data_20??_??_??.csv"
if /I "%~x1" == ".csv" set "FileNamePattern=%~nx1"
for /F "delims=" %%I in ('dir "C:\SourceDir\%FileNamePattern%" /A-D /B /O-N 2^>nul') do (
echo Processing file %%I ...
call process.bat "C:\CSVDataLod" AccntDataloadprocess "dataAccess.name=C:\SourceDir\%%I"
if /I not "%~1" == "/A" goto EndBatch
set "FileFound=1"
)
if not defined FileFound echo There is no file "%FileNamePattern%" in directory "C:\SourceDir".
:EndBatch
endlocal
我建议打开命令提示符并运行
dir "C:\SourceDir\Account_data_20??_??_??.csv" /A-D /B /O-N
然后您知道FOR处理了哪些行。下一次运行
dir "C:\SourceDir\Account_data_20??_??_??.csv" /A-D /B
dir "C:\SourceDir\Account_data_20??_??_??.csv" /A-D /B /ON
查看DIR如何在不指定特定顺序的情况下输出 CSV 文件名,从而导致打印文件系统返回的文件名,并按名称按字母顺序而不是相反的字母顺序显式排序。
文件系统 NTFS 按本地特定字母顺序返回与通配符模式匹配的文件名列表,而 FAT16、FAT32、exFAT 等 FAT 文件系统返回根本没有排序的文件名。实际上,所有文件系统都按存储在文件系统表中的顺序返回文件名。文件系统只是使用不同的方法来将文件名添加到文件系统的表中。FAT 文件系统总是在目录表的末尾附加一个新文件名,而 NTFS 使用本地特定的字母排序算法在目录表中插入一个新文件名。
阅读有关使用命令重定向运算符的Microsoft 文档,了解2>nul
. 重定向运算符>
必须在 FOR 命令行上使用脱字符进行转义,^
以便在Windows 命令解释器在执行命令FOR之前处理此命令行时将其解释为文字字符, FORdir
在后台启动的单独命令进程中执行嵌入式命令%ComSpec% /c
行内 '
作为附加参数附加。
编辑:
批处理文件可以使用/a
或/A
作为参数运行,以处理与通配符模式匹配的所有 CSV 文件,从最新到最旧,而不仅仅是最新。批处理文件也可以使用.csv
源目录中的文件名运行,以处理这个特定的 CSV 文件,而不是最新的 CSV 文件。
要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
call /?
dir /?
echo /?
endlocal /?
for /?
goto /?
setlocal /?