Давайте попробуем.
@echo off
setlocal enabledelayedexpansion
set "_sqlcmd=C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe"
set cnt=1
for %%i in (*.txt) do (
set id=%%i
call :check
)
:check
for /f "tokens=1,*" %%a in ('tasklist ^| find /I /C "mysql"') do set procs=%%a
if !procs! leq 20 (
if not "!id!"=="%0" "%_sqlcmd" -u root --password=passhere -D databasename -e "LOAD DATA INFILE 'D:\Newfolder\dd\!id!' IGNORE INTO TABLE tablename FIELDS TERMINATED BY ':' LINES TERMINATED BY '\n'"
set /a cnt+=1
) else (
goto check
)
echo del /Q *.txt
Будет запущено девять mysql
процессов, если один (или более) закроется, он запустится больше, пока мы снова не достигнем 20 процессов.(Вы можете увеличить / уменьшить количество процессов, которое хотите разрешить.) Таким образом, вы не будете запускать слишком много mysql
процессов одновременно, которые в конечном итоге просто потребляют всю память и ЦП.
Что касается удалениячасть, вы заметите строку кода в конце файла echo del /Q *.txt
Это будет просто echo
команда удаления всех txt
файлов в папке, ТОЛЬКО после того, как скрипт завершил весь прогон, если вам 100% уверен, что вы хотите удалить файл после его завершения, а затем просто удалите echo
из этой строки, просто помните, что если вы удалите его, он удалит все файлы.