Cierre del archivo del lote inmediatamente una vez lanzado

Tengo este script para lotes que se supone que es el menú de un juego. Aún no lo he terminado pero me di cuenta de que cuando lo ejecuto inmediatamente se cierra. Si alguien pudiera ayudarme a averiguar el problema lo apreciaría mucho, gracias. Aquí está el código:

@echo off
set save_file_path=C:\Users\maxqs\Desktop\Coding Projects\Personal Project\PathRPG\save_file.txt
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                    
echo.                                                                                                                                                                                                    
echo.                                                                                                                                                                                                       
echo.                                                                                                                                                                                                      
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo                                :oooo+/`                -:      dy          :ooooo/.     `ooooo/-       -+syys+-                                      
echo                                oMo::/yMy               dM      Nm          sMo::/yMy    `Md::/oNm.   :mm+-.-:od+                                     
echo                                oM/    hM-  :dddddy-   hNMhhh.  Nmohdmd/    sM:    mM`   `Mh    /My  :Mh                                              
echo                                oM/  `/Nd   ``   `dN    dM      NN:   hM.   sM/..-sMo    `Mh   -dN:  hM-   `````                                      
echo                                oMmddhs/    -sdhhhNM`   dM      Nm    oM:   sMdydMd`     `MNdddy+`   yM:   +hhmMo                                     
echo                                oM/        .Md`   yM`   dM      Nm    oM:   sM:  /Nm:    `Mh         :Md`     /Mo                                     
echo                                oM/        `mm/:/sNM`   sMo:/`  Nm    oM:   sM:   `sMy`  `Mh          :dNs/::/yM+                                     
echo                                -/.         `/oo+.:/     :+o+`  //    -/`   -/.     -//  `/:            ./ooo+:.                                      
echo.                                                                                                                                                                                                                                                                                       
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.                                                                                                                                                                                                        
echo.
echo            [1] Start game
echo            [2] End game                                                                                                                                                                                                                                                                                                                                                                                                                
set /p input= >
if %input%== 1 goto end_menu
if %input%== 2 goto start_game

:start_game

echo            [1] New game
echo            [2] Continue
echo            [3] Options
set /p input= >
if %input%== 1 goto new_game
if %input%== 2 goto continue_game
if %input%== 3 goto options

:new_game

echo 000#>%save_file_path%
CALL game.bat
goto end_menu

:end_menu

Pregunta hecha hace 3 años, 4 meses, 28 días - Por scriptsphinx


3 Respuestas:

  • Esto es lo que usted código debe parecer, utiliza doble citas, y paréntesis para proteger las cadenas previstas, y la elección. exe como el comando correcto y apropiado para utilizar para solicitar la entrada de uso.

    @echo off
    set "save_file_path=C:\Users\maxqs\Desktop\Coding Projects\Personal Project\PathRPG\save_file.txt"
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo                                :oooo+/`                -:      dy          :ooooo/.     `ooooo/-       -+syys+-
    echo                                oMo::/yMy               dM      Nm          sMo::/yMy    `Md::/oNm.   :mm+-.-:od+
    echo                                oM/    hM-  :dddddy-   hNMhhh.  Nmohdmd/    sM:    mM`   `Mh    /My  :Mh
    echo                                oM/  `/Nd   ``   `dN    dM      NN:   hM.   sM/..-sMo    `Mh   -dN:  hM-   `````
    echo                                oMmddhs/    -sdhhhNM`   dM      Nm    oM:   sMdydMd`     `MNdddy+`   yM:   +hhmMo
    echo                                oM/        .Md`   yM`   dM      Nm    oM:   sM:  /Nm:    `Mh         :Md`     /Mo
    echo                                oM/        `mm/:/sNM`   sMo:/`  Nm    oM:   sM:   `sMy`  `Mh          :dNs/::/yM+
    echo                                -/.         `/oo+.:/     :+o+`  //    -/`   -/.     -//  `/:            ./ooo+:.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo.
    echo            [1] Start game
    echo            [2] End game
    choice /c 12 /n /m ">"
    if errorlevel 2 goto end_menu
    
    :start_game
    
    echo            [1] New game
    echo            [2] Continue
    echo            [3] Options
    choice /c 123 /n /m ">"
    if errorlevel 3 goto options
    if errorlevel 2 goto continue_game
    
    :new_game
    
    (echo 000#) > "%save_file_path%"
    CALL "game.bat"
    pause
    goto end_menu
    
    :end_menu
    

    BTW, removí los caracteres espaciales sin sentido y desperdicio de su código, los 5376 de ellos obviamente aumentaron su tamaño de script en 5Kb también.

    Respondida el Dec 18, 2020 a las 03:37 - por pixelpioneerx

    Votos positivos: 0 | Votos negativos: 0

  • El problema principal que está causando que tu script se cierre inmediatamente es la forma en la que estás haciendo la lectura de la opción seleccionada por el usuario. Para solucionar este problema, te sugiero hacer las siguientes modificaciones:

    • Utiliza un bucle `do while` para que el script se mantenga abierto hasta que el usuario decida salir explícitamente.
    • Para la lectura de las opciones, usa la estructura `set /p` seguido de `if` para comparar la opción seleccionada.

    Aquí te muestro un ejemplo de cómo podrías ajustar tu script:

    batch
    @echo off
    set save_file_path=C:\Users\maxqs\Desktop\Coding Projects\Personal Project\PathRPG\save_file.txt
    
    :menu
    cls
    
    echo.
    echo            [1] Start game
    echo            [2] End game
    set /p input=
    if "%input%"=="1" goto start_game
    if "%input%"=="2" exit
    
    :start_game
    cls
    
    echo.
    echo            [1] New game
    echo            [2] Continue
    echo            [3] Options
    set /p input=
    if "%input%"=="1" (
        echo 000>%save_file_path%    CALL game.bat
        goto menu
    )
    if "%input%"=="2" (
        REM Continuar juego
        goto menu
    )
    if "%input%"=="3" (
        REM Opciones
        goto menu
    )
    

    Con estos cambios, tu script debería mantenerse abierto y permitir al usuario seleccionar las diferentes opciones del menú. Una vez que el usuario elija salir (opción 2), el script se cerrará de forma adecuada. Asegúrate de ajustar cualquier otra parte del script según sea necesario para que se adapte mejor a tus necesidades.

    Respondida el Dec 19, 2020 a las 03:37 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema es que estás utilizando el comando CALL para llamar al script game.bat, que hará que el script actual se suspenda hasta que game.bat haya terminado. Para evitar este comportamiento, puedes utilizar el comando START en su lugar, que ejecutará game.bat en una nueva ventana de consola y permitirá que el script actual continúe ejecutándose.

    Aquí tienes el código modificado:

    
    :new_game
    echo 000>%save_file_path%START game.bat
    goto end_menu
    

    De esta manera, el script game.bat se ejecutará en una nueva ventana de consola y el script actual continuará ejecutándose, permitiendo que el menú permanezca abierto.

    Respondida el Dec 19, 2020 a las 03:49 - por Gemini

    Votos positivos: 0 | Votos negativos: 0