2016-05-07 3 views
1

Я являюсь владельцем сервера Minecraft и в настоящее время работаю над созданием сценария автоматической настройки, чтобы другие люди могли легче запускать серверы. У меня все закончено, но после его тестирования этот код выдает ошибку «Синтаксис команды неверен». Вот код:Batchfile - Синтаксис команды неверен

@ECHO OFF 
SETLOCAL EnableDelayedExpansion 
ECHO Welcome to the startup of your new Minecraft server^^! 
ECHO Upon completion of the first start, please exit the program and run "start.bat". 
ECHO When you are ready, press any key. 
PAUSE>NUL 
SET /p "hasrun" = < "%~dp0\hasrun.txt" 

:Run 
IF "!hasrun!" == "0" (
    ECHO "1" >> "%~dp0\hasrun.txt" 
    java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui 
) ELSE (
    ECHO This is not your first run^^! Use "start.bat" instead^^! 
    PAUSE 
) 

ошибка, кажется, происходит в соответствии с ECHO "1" >> "%~dp0\hasrun.txt". Прошло некоторое время с тех пор, как я в последний раз писал что-нибудь в партии, так что это, вероятно, что-то очевидное. Точный выход (с эхо выкл) является:

Welcome to the startup of your new Minecraft server! 
Upon completion of the first start, please exit the program and run "start.bat". 

When you are ready, press any key. 

После нажатия на кнопку, чтобы скоротать PAUSE, он говорит:

The syntax of the command is incorrect. 
This is not your first run! Use "start.bat" instead! 
Press any key to continue... 

Кроме того, содержание hasrun.txt просто один ноль. («0» без котировок)

+0

Я отвалил правку. Вы не можете добавлять новые вопросы к одному и тому же вопросу, как только начнете получать ответы. Если у вас появилась новая проблема, это новый вопрос, и вам нужно опубликовать его как один. Вы всегда можете указать ссылку на этот вопрос в новой для справки. –

+0

До сих пор установлено содержимое '! Hasrun!'? Если это так, отрицайте строку 'if not exist ... 'из моего ответа и заменяйте' '! Hasrun!" == "0" 'с' "! Hasrun!" == "0" '. – Bloodied

+0

@KenWhite Ах, ладно, извините. Я до сих пор довольно новичок в задании вопросов на этом сайте, и прошло некоторое время с тех пор, как я спросил его. –

ответ

2

Ваша проблема - переменная !hasrun!. Ваш метод установки переменной делает пустую или недопустимую переменную, и если файл пуст, то !hasrun! ничего не значит, что не соответствует циклу for.


@ECHO OFF 
SETLOCAL EnableDelayedExpansion 
ECHO Welcome to the startup of your new Minecraft server^^! 
ECHO Upon completion of the first start, please exit the program and run "start.bat". 
ECHO When you are ready, press any key. 
PAUSE>NUL 
:: Default variable set, or the for loops fails because "" does not equal "0". 
if not exist "%~dp0\hasrun.txt" echo 0 >%~dp0\hasrun.txt 
:: Set the file to a variable. 
SET /p hasrun=<%~dp0\hasrun.txt 

:Run 
:: Space after "0 " appended because 0> refers to a debugging echo. 
IF "!hasrun!"=="0 " (
    ECHO 1>"%~dp0\hasrun.txt" 
    java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui 
    pause 
) ELSE (
    ECHO This is not your first run^^! Use "start.bat" instead^^! 
    PAUSE 
) 
del %~dp0\hasrun.txt 
+0

Спасибо за ответ! Тестирование прямо сейчас. –

+0

Это работает! Но файл также пропускает оператор IF, как если бы 'hasrun.txt' равнялось чем-то отличному от нуля. Опять же, это, наверное, что-то очевидное, но я не уверен. –

+0

О, нет, я испортил, плохо исправил это плохо. – Bloodied