Давайте рассмотрим, почему это занимает много времени.У вас есть 128k файлов, вы запускаете 4 цикла, то есть сами циклы for обрабатывают каждый файл 5 раз, то есть 640 000 процессов самостоятельно, затем вы запускаете echo
s для каждого, то есть еще больше процессов, затем мы проверяемесли папка существует и, если ее не создать, папка существует, это другой процесс.Вы фактически выполняете более миллиона процедур для выполнения этой задачи.
Может быть, мы избавимся от всех нежелательных циклов for, используем *
вместо именования каждого файла, а затем избавимся от отложенного расширения, поскольку мы можем простобез необходимости устанавливать переменные:
@echo off
for %%i in (*) do (
echo file found %%i
for /f "tokens=1* delims=-" %%a in ("%%i") do (
if "%%a-%%b"=="%%i" (
md %%a>nul
move "%%~fi" %%a
)
)
)
echo Finished
pause
Что касается части имени и расширения, вы никогда не будете использовать их после установки. Если вы все еще хотите где-то использовать имя и расширение файлов, тогда вы простоиспользуйте их без необходимости устанавливать переменные:
@echo off
for %%i in (*) do (
echo file found %%i
for /f "tokens=1* delims=-" %%a in ("%%i") do (
if "%%a-%%b"=="%%i" (
md %%a>nul
move "%%~fi" %%a
echo This is the file extension: %%~xi
echo This is the filename: %%~na
echo This is the filename, drive and path: %%~dpi
echo This is the filename with full path: %%~fi
)
)
)
echo Finished
pause