Причина, по которой ваши вычисления не работают, заключается в том, что CLI не поддерживает плавающие точки.
Когда вы делаете:
set / a NumBas = %% ~ na / 1000 *1000* 1006 *
вы получаете десятичное значение. Я подозреваю, что вы пытаетесь воспользоваться этим, чтобы попытаться округлить значение. К сожалению, это не работает, потому что, как только вы делаете 1/1000 , это 0,0001 , который становится 0 , поэтому ваш NumBas становится нулевым при прохождении к следующей команде.
Я также заметил, что вы делите и умножаете на 1000 вместо 100. деление на 100 приведет (как только исправится) к тому, что ваши файлы будут отсортированы по тысячам:
1-1000
1001-2000
2001-3000
, а не на 100, как вы задали в своем вопросе, чтобы исправить это, просто измените 1000 на 100.
Теперь с плавающей запятой. Самый простой способ исправить это - проверить, если NumBas значение меньше 1 , и если оно есть, сделайте его 1
IF !NumBas! LSS 1 Set /a NumBas +=1
Этот скорректированный код должен привести к тому, что вы ' Вы ищете:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for %%a in (*.txt) do (
echo %%~na|FINDSTR /R /C:"^[0-9]*$" >nul 2>nul&&(
set /a NumBas=%%~na/100*100
IF !NumBas! LSS 1 Set /a NumBas +=1
set /a NumHaut=!NumBas!+99
echo %%~a -^> !NumBas!-!NumHaut!
IF NOT EXIST "!NumBas!-!NumHaut!" MD "!NumBas!-!NumHaut!"
MOVE /Y "%%~a" "!NumBas!-!NumHaut!\%%~a" >nul
)
)