Пока вы просматриваете последние 4 символа имени файла, вы также можете просмотреть даты. Я не знал, будет ли начало файла фиксированным или будет изменено, но я счел разумным предположить, что синтаксис date_end будет последовательным.
set filedate=!file:~-9,-7!
Это извлечет символы между 9-м и 7-м от конца строки, хранящейся в !file!
. С синтаксисом у вас будет двухзначный номер месяца. Это также позволит избежать путаницы с датами из 2 или 4 цифр.
Если у вас есть имя этой и другой папки, вы можете просто создать обе папки сразу и поместить файл прямо в подпапку, так что вам все равно потребуется только один проход по набору файлов.
@echo off & setlocal EnableDelayedExpansion
echo.
pushd "%~dp0"
for %%j in (*.csv) do (
set file=%%~nj
set folder=!file:~-4!
if !folder!==FI_2 set folder=!file:~-6!
set filedate=!file:~-9,-7!
SET datefolder=!folder!\!filedate!
if not exist !folder! md !folder!
if not exist !folder!\!filedate! md !folder!\!filedate!
move "%%~j" "!datefolder!"
echo "%%~j" -^> "!datefolder!"
)
popd
echo.& echo.Done
:: End_Of_Batch