Вас смущает сообщение об ошибке, как @indiv.На set /a "x = 1"
нет ошибки;это прекрасно.Так как вы не отключили отображение сценария, он отображает каждую команду, когда распознает ее.Он правильно распознал и выполнил команду set
.Однако он не смог разобрать и распознать команду, которая последовала.Как это не было признано, это не было отражено.Итак, ошибка в следующей команде, которую вы не видели!
Следующая команда - это команда if
;к сожалению, поскольку вы использовали блок с круглыми скобками, то, что командный процессор бесполезно сообщает, что где-то в остальной части командного файла есть ошибка.Вы могли бы поэкспериментировать с использованием метода отладки «binary-chop» для решения этой проблемы.Просто удалите половину кода, пока ошибка не исчезнет.Затем вы узнаете, в каком разделе кода содержится синтаксическая ошибка.Повторяйте, пока все ошибки не будут найдены.Я сделал это для вас.
У вас есть синтаксическая ошибка при установке переменной rnd
: set rnd %random%
должно содержать =
.Вам также необходимо использовать отложенное расширение, так как следующее %rnd%
будет расширяться до пустого значения, поскольку расширение происходит до того, как переменная будет создана и назначена.Я также исправил это.В результате вы получите:
rem %1 timer
rem %2 training name
rem %3 max training set
rem %4 testing count
setlocal delayedexpansion
set /a "x = 1"
:while1
if %x% leq %3 (
set /a "y = 1"
set /a "count = 0"
md ..\%2_%x%
md ..\%2_%x%\traces
del /q ..\%2_%x%\traces\*.*
md ..\%2_%x%\activeOnlytraces
del /q ..\%2_%x%\activeOnlytraces\*.*
md ..\%2_%x%\testingtraces
del /q ..\%2_%x%\testingtraces\*.*
md ..\%2_%x%\testingactiveOnlytraces
del /q ..\%2_%x%\testingactiveOnlytraces\*.*
move .\trace\*.* ..\%2_%x%\traces\*.*
move .\activeOnlytraces\*.* ..\%2_%x%\activeOnlytraces
for /F %%i in ('dir traces /b') do (
set /a "count = count + 1"
)
:while2
if %y% leq %4 (
:beg
set rnd=%random%
if !rnd! GTR %count% goto beg
if not exist ".\traces\Trace%rnd%.xml" (
goto beg
)
move ..\%2_%x%\traces\Trace%rnd%.xml ..\%2_%x%\testingtraces\.
del /q ..\%2_%x%\traces\Trace%rnd%.xml
move ..\%2_%x%\activeOnlytraces\Trace%rnd%.xml ..\%2_%x%\testingactiveOnlytraces\.
del /q ..\%2_%x%\activeOnlytraces\Trace%rnd%.xml
set /a "y = y + 1"
goto :while2
)
set /a "x = x + 1"
goto :while1
)
Теперь вы могли бы это сделать.Изучите более мощные методы отладки - то есть взламывайте их до тех пор, пока они не сработают - не просто бросайте полотенце при первой ошибке, иначе вы никогда ничего не узнаете.(Я добавил это как подсказку другим читателям)