Условие. Имеется 2 bat-файла:
1.bat создает заданное число файлов с произвольным именем [001_имя1.txt, 002_имя2.txt,... 030_имя30.txt]
Код:
@Echo Off
SetLocal EnableExtensions
set /a rid=9
set /a rip=0
cls
del *.txt
for /l %%1 in (1,1,9) do call :rnd
for /l %%2 in (10,1,30) do call :rnd2
dir
exit /b
:rnd
set f=%random%
set /a rip+=1
echo 1 > "00%rip%_%f%.txt"
goto :eof
:rnd2
set e=%random%
set /a rid+=1
echo 1 > "0%rid%_%e%.txt"
goto :eof
Второй файл 2.bat переименовывает их в обратном порядке, чтобы получить в таком виде [030_имя1.txt, 029_имя2.txt, 028_имя3.txt,... 001_имя30.txt]
Код:
@Echo Off
SetLocal EnableExtensions
set /a sum=0
set ned=0
For %%A In ("*.txt") Do Call :Func "%%~nxA"
dir
exit /b
:Func
if /i %sum% lss 1 for %%k in (*.txt) do set /a ned+=1
set /a fer=%ned%-sum
set /a sum+=1
Set FileName=%~n1
rem if /i %fer% geq 100 if %fer%==%ned% ren "%FileName%%~x1" "%fer%%FileName:~3%%~x1"
if /i %fer% geq 10 if /i %fer% lss 100 ren "%FileName%%~x1" "0%fer%%FileName:~3%%~x1"
if /i %fer% lss 10 if /i %fer% gtr 0 ren "%FileName%%~x1" "00%fer%%FileName:~3%%~x1"
goto :eof
Вопрос: почему второй батник 2.bat работает корректно, только когда файлов меньше 26 шт?
В приведенном примере в файле 1.bat я ввел цикл на создание 30 текстовых файлов. Корректно переименовываются все файлы между первым и последним - их программа не трогает.
Поясните в чем причина?
Для наглядности, поменяйте значение 30 в строке
Код:
for /l %%2 in (10,1,30) do call :rnd2
на значение 24
Код:
for /l %%2 in (10,1,24) do call :rnd2
и запустите 1.bat. Теперь 2.bat работает как надо.