BATCH (победа) - остановка при наличии нескольких текстовых файлов - PullRequest
0 голосов
/ 19 сентября 2011

хорошо, так что я делаю генератор случайных чисел в пакетном режиме, и он работает. но я хочу, чтобы он остановился, когда он сделал 5 разных случайных чисел. поэтому я установил случайные числа, составляющие текстовые файлы, когда они были сгенерированы, и я хочу максимум 5 текстовых файлов, пока летучая мышь не остановит это.

:go
set go=%random%
title GENERATING %go%
if /i %go% lss 1 goto go
if /i %go% gtr 7 goto go
if exist goal%go%.txt goto go
goto go

:obje1
set goal1="11111"
echo lol > goal%go%.txt
goto go

:obje2
set goal_2="22222"
echo lol > goal%go%.txt
goto go

:obje3
set goal_3="3333"
echo lol > goal%go%.txt
goto go

:obje4
set goal_4="4444"
echo lol > goal%go%.txt
goto go

:obje5
set goal_5="55555"
echo lol > goal%go%.txt
goto go

:obje6
set goal_6="6666"
echo lol > goal%go%.txt
goto go

:obje7
set goal_7="7777"
echo lol > goal%go%.txt
goto go

Я думал, смогу ли я вставить что-то похожее на это? if exist equ 5 *.txt goto done

но это не сработало

спасибо

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

Вам нужно сделать счетчик. Кроме того, вы можете ограничить генератор случайных чисел числом от 1 до 7, как показано ниже.

set count=0
:go
if %count%==5 exit /b
set /a go=%random% %% 7 + 1
...
goto go

:obj1
set /a count=%count%+1
...
goto go
1 голос
/ 20 сентября 2011

Некоторые предостережения и рекомендации.

  1. Вы можете сделать подсчитанный цикл с помощью команды FOR /L.Смотри HELP FOR.

  2. %RANDOM% возвращает случайное число от 0 до 32767. Вы можете установить пределы сгенерированного случайного целого числа с помощью простой арифметики.Смотри HELP SET.Из-за диапазона %RANDOM% операция по модулю, предложенная Hand-e-food, приведет к небольшому перекосу.Поэтому лучше использовать деление.

  3. Наконец, установка переменной внутри цикла работает только с отложенным расширением SETLOCAL ENABLEDELAYEDEXPANSION и использованием синтаксиса !XXX!.См. HELP SET.

Итак, собрав все части вместе, попробуйте это

@ECHO off
SETLOCAL enabledelayedexpansion
FOR /L %%i IN (1,1,5) DO (
  SET /A go=!random!*7/32768
  SET /A go=!go!+1
  echo %%i .- !go!
)
0 голосов
/ 20 сентября 2011

Взятие от PA

Если ваша цель - просто создать 5 .txt файлов со случайными числами, то вы можете сделать это в цикле FOR /L:

FOR /L %%F IN (1,1,5) DO (
 ECHO LOL>"file!random!.txt"
)

Теперь, если вынужно следить за тем, какие файлы были сгенерированы, мы можем выбросить их в «Список файлов»

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /L %%F IN (1,1,5) DO (
 SET go=!random!
 ECHO LOL>"file!go!.txt"
 ECHO file!go!.txt>>"File List.txt"
)
...