Domanda

Sto tentando di creare un file batch che prenderà una frase predefinita e lo rabbrizzerà, quindi echo è all'utente.

Ad esempio, frase predefinita: Mi piace davvero scrivere i file batch

Echo all'utente: Goditi il batch davvero i file che scrivo

capisco come funziona la variabile% in% casuale, oltre a looping, ma perché non so quanto tempo la frase sarà, né capire come definire / popolare gli array in file batch, non so doveiniziare.

Aiutatemi a riempire i pezzi mancanti nelle mie conoscenze.Grazie!

È stato utile?

Soluzione

@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 istanzia un cmd che emette ogni parola preceduta da un numero casuale.Questo elenco è ordinato, i numeri rimossi e le parole concatenate.Tutto questo avvolto in una subroutine con parametri di input e output.

Per il solito approccio utilizzato in altre lingue, dividendo la stringa in parti, immagazzinare in array (tipo di, non ci sono array in scripting batch), mescolare e unire, la subroutine può essere qualcosa come

: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 
.

Altri suggerimenti

Ecco un metodo semplice - non gestisce i caratteri di veleno ma per la tua corda va bene.

@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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top