Самый простой и быстрый способ получить имя CSV-файла с самой последней датой в имени файла - это использовать команду DIR с опцией /O-N
, чтобы получить выходные имена CSV-файлов, упорядоченные по имени в обратном порядке. В этом случае имя файла с самым новым именем выводится первым DIR . Вывод DIR должен быть захвачен и обработан с помощью FOR . FOR l oop завершается после запуска другого командного файла с выводом первого имени файла DIR .
@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 без указания определенного c порядка, в результате чего печатаются имена файлов, возвращенные файловой системой и явно упорядоченные имя в алфавитном порядке, а не в обратном алфавитном порядке.
Файловая система NTFS возвращает список имен файлов, соответствующих шаблону подстановки в локальном порядке c alphabeti c, в то время как файловые системы FAT, такие как FAT16, FAT32 , exFAT возвращает совершенно неупорядоченные имена файлов. На самом деле все файловые системы возвращают имена файлов в том порядке, в котором они хранятся в таблице файловой системы. Файловые системы используют разные методы добавления имени файла в таблицу файловой системы. Файловые системы FAT всегда добавляют новое имя файла в конец таблицы каталога, в то время как NTFS вставляет новое имя файла в таблицу каталога, используя локальный алгоритм сортировки c alphabeti c.
Прочтите документацию Microsoft о Использование операторов перенаправления команд для объяснения 2>nul
. Оператор перенаправления >
должен быть экранирован символом вставки ^
в командной строке FOR , чтобы он интерпретировался как буквальный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR который выполняет встроенную dir
командную строку в отдельном командном процессе, запущенном в фоновом режиме с %ComSpec% /c
и командной строкой в '
, добавленной в качестве дополнительных аргументов.
Изменить:
Пакетный файл может быть запущен с /a
или /A
в качестве аргумента для обработки всех CSV-файлов, соответствующих шаблону подстановки, от самого нового к самому старому, а не только к самому новому. Пакетный файл также можно запустить с именем .csv
файла в исходном каталоге для обработки этого c CSV-файла вместо самого нового CSV-файла.
Для понимания используемых команд и того, как они работают, откройте окно командной строки , выполните следующие команды и внимательно прочтите все страницы справки, отображаемые для каждой команды.
call /?
dir /?
echo /?
endlocal /?
for /?
goto /?
setlocal /?