Question

Je tente de créer un fichier de commandes qui prendra une phrase prédéfinie et de le brouiller, puis l'écho à l'utilisateur.

Par exemple, phrase prédéfinie: J'aime vraiment écrire des fichiers de lot

echo à l'utilisateur: Profitez du lot vraiment des fichiers j'écris

Je comprends comment le% aléatoire% variable fonctionne, ainsi que la boucle, mais parce que je ne sais pas combien de temps la phrase sera, ni de comprendre comment définir / peupler des tableaux dans des fichiers de lots, je ne sais pas oùcommencer.

Aidez-moi s'il vous plaît à remplir les pièces manquantes à ma connaissance.Merci!

Était-ce utile?

La solution

@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 instancie une cmd qui génère chaque mot précédé d'un nombre aléatoire.Cette liste est triée, les chiffres supprimés et les mots concaténés.Tout cela enveloppé dans un sous-programme avec des paramètres d'entrée et de sortie.

Pour l'approche habituelle utilisée dans d'autres langues, diviser la chaîne en pièces, stocker dans une matrice (en quelque sorte, il n'y a pas de tableaux dans les scripts par lots), mélanger et rejoindre, le sous-programme peut être quelque chose comme

: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 

Autres conseils

Voici une méthode simple - elle ne gère pas les caractères antipoxyme, mais pour votre chaîne, c'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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top