Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Минимум изменений, но экономия по времени 20-25%.
Отличие - в способе извлечения символа из набора
Код: Выделить весь код
@Echo Off
cls
	Set "Out=Z:\Box_Out\полная фигня.txt"
	Set /A Max=8765

rem не использовать ^%&|<>"()'=
	Set "Symb=~!#$*_+1234567890-QWERTYUIOP{}qwertyuiop[]ASDFGHJKL:asdfghjkl;\ZXCVBNM?zxcvbnm,./ Ё№ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёйцукенгшщзхъфывапролджэячсмитьбю"
	
	Set /A NS=-1 &FOR /L %%i IN (0,1,255) DO (Call :Substr %%i "S" &&(Set /A NS+=1 &Call Set "@@@%%NS%%=%%S%%"))

	Set "Str="
	Set /A N=0
	Set /A M=0

	Set /A Quant=4000
	2>nul Del "%Out%"
	:Begin
		Set /A N+=1
		Set /A M+=1
		Set /A K=(%NS%+1)*%Random%/32768
		Call Set "Str=%Str%%%@@@%K%%%"
		If %N% EQU %Quant% (
			Echo DownLoad %M%
			<Nul Set /P "S=%Str%">>"%Out%"

			Set "Str="
			Set "S="
			Set /A N=0
		)
	If %M% NEQ %Max% GoTo :Begin
	If %N% NEQ 0 <Nul (Echo DownLoad %M% &Set /P S=%Str%>>"%Out%")
Pause
GoTo :Eof

:Substr
	Call Set "@S=%%Symb:~%1,1%%"
	Set "%~2=%@S%"
	If "%@S%"=="" Exit /B 1
Exit /B 0
В обоих кодах запись в файл ведётся квантами. Почему-то считал, чем больше квант, тем быстрее работа скрипта. Оказалось, не так однозначно. Буферизация? Но, в любом случае, генерация случайного набора занимает много больше времени.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 27-03-2019 в 17:09.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:47, 27-03-2019 | #6