Pergunta

Eu estou tentando criar um arquivo em lotes que terá uma pré-definido de frases e suba-a, em seguida, eco-lo para o usuário.

Por exemplo, predefinidas frase:Gosto muito de escrever, arquivos de lote

O eco do usuário:aproveite lote de arquivos de que eu realmente escrever

Eu entendo como o %ALEATÓRIO% variável de obras, bem como o ciclo, mas porque eu não sei quanto tempo a sentença será, nem de compreender como definir/preencher matrizes em arquivos em lote, não sei por onde começar.

Por favor, me ajudar a preencher as peças que faltam no meu conhecimento.Obrigado!

Foi útil?

Solução

@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 

Se instancia um cmd que produz cada palavra precedida por um número aleatório.Esta lista é ordenada, números removido e palavras concatenadas.Tudo isso envolto em uma sub-rotina com parâmetros de entrada e saída.

Para a abordagem usual usados em outros idiomas, dividindo a string em partes, armazenamento em matriz (uma espécie de, não existem matrizes em batch script), mexendo e juntando, a sub-rotina pode ser algo 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 

Outras dicas

Aqui está um método simples - ele não lidar com veneno personagens, mas para a sua cadeia é bom.

@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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top