Pregunta

Estoy intentando crear un archivo por lotes que tomará una oración predefinida y la luche, luego lo haga eco al usuario.

Por ejemplo, oración predefinida: Realmente disfruto escribiendo archivos por lotes

ECHO al usuario: Disfruta de los archivos de lotes realmente i escribiendo

Entiendo cómo funciona la variable% aleatoria al azar, así como el bucle, pero porque no sé cuánto tiempo será la sentencia, ni entenderá cómo definir / rellenar matrices en archivos por lotes, no sé dóndecomenzar.

Por favor, ayúdame a llenar las piezas que faltan en mi conocimiento.¡Gracias!

¿Fue útil?

Solución

@echo off
    setlocal enableextensions enabledelayedexpansion

    call :scramble "I really enjoy writing batch files" scrambled

    echo %scrambled%

    endlocal
    exit /b 

:scramble sentence returnVar
    setlocal enabledelayedexpansion
    set "output=" & for /f "tokens=2" %%y in ('cmd /q /v:on /c "for %%w in (%~1) do echo(^!random^! %%w"^|sort') do set "output=!output! %%y"
    endlocal & set "%~2=%output:~1%"
    exit /b 

Si instaña un CMD que emite cada palabra precedida por un número aleatorio.Esta lista está ordenada, se eliminan los números y las palabras concatenadas.Todo esto envuelto en una subrutina con parámetros de entrada y salida.

Para el enfoque habitual utilizado en otros idiomas, dividir la cadena en partes, almacenar en matriz (tipo de, no hay matrices en secuencias de comandos por lotes), arrastrando y uniéndose, la subrutina puede ser algo así como

:scramble sentence returnVar
    setlocal enabledelayedexpansion
    set "counter=0" & for %%w in (%~1) do ( set "_word[!random!_!counter!]=%%w" & set /a "counter+=1" )
    set "output="   & for /f "tokens=2 delims==" %%w in ('set _word[') do set "output=!output! %%w"
    endlocal & set "%~2=%output:~1%"
    exit /b 

Otros consejos

Aquí hay un método simple: no maneja los caracteres de veneno, pero para su cadena está bien.

@echo off
call :scramble I really enjoy writing batch files
goto :EOF 
:scramble
set "scrambled%random%=%1"
shift
if not "%~1"=="" goto :scramble
for /f "tokens=1,* delims==" %%a in ('set scrambled') do set /p "=%%b "<nul
echo(
pause

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top