我的批处理文件在运行时立即关闭



我试图使它,所以当脚本第一次运行时,它检查是否有一个文件,如果没有,那么这是第一次脚本已经运行,它应该运行一些代码,否则它被运行不止一次,应该执行其他代码。每次我运行文件时,cmd都会崩溃。

这是我的文件

@echo off
cd src/ops
IF EXIST setupdone.txt (
set /p setting=Do you want to run the server or change your settings?:
echo "1 - Run Server"
echo "2 - Change Settings"
IF %setting% == "1" (
echo it is 1
) ELSE (
IF %setting% == "2" (
echo it is 2
) ELSE (
echo Invalid Input! Rerun this file to try again.
)
)
) ELSE (
cd src/server
echo Installing Modules...
call npm install
cd ../settings
call npm install
cd %~dp0
cd src/ops
echo setupdone>setupdone.txt
cd %~dp0
)
echo done
pause

对于您提交的代码的主要问题的解决方案可能是批处理文件标记下的所有页面中最常见的。当变量在括号内定义或修改时,为了使其与新值一起使用,需要启用延迟变量展开。

但是,您不需要使用变量,您只需要不使用Set及其/P选项。choice.exe实用程序就是为这种类型的任务提供的。

的例子:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
CD /D "%~dp0."
If Exist "srcopssetupdone.txt" (
Echo 1. Run Server
Echo 2. Change Settings
"%SystemRoot%System32choice.exe" /C 12 /M "Do you want to run the server, or change your settings"
If Not ErrorLevel 2 (Echo It is 1.) Else Echo It is 2.
) Else (
PushD "srcserver" 2>NUL && (
Echo Installing Modules...
Call "npm.cmd" install
PopD
)
PushD "srcsettings" 2>NUL && (
Call "npm.cmd" install
1>"..opssetupdone.txt" Echo setupdone
PopD
)
)
Echo Done. 
Pause

最新更新