Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Переименование группы файлов, используя команды bat (http://forum.oszone.net/showthread.php?t=251960)

SergMarkow 20-01-2013 23:23 2071335

Переименование группы файлов, используя команды bat
 
Условие. Имеется 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 работает как надо.


Время: 23:16.

Время: 23:16.
© OSzone.net 2001-