@echo off
call :getvar
if not "%x%" == "" goto :continue
REM var not set; ask user:
REM insert your input code and verification here
REM write it to the end of this batch:
echo set "x=%x%">>"~f0"
:continue
REM rest of your code
REM the following line should be the very last line in this batch (but WITH a CRLF):
:getvar
call :getvar
пытается установить переменную (возвращается пустой при первом запуске)
Строка if
проверяет, если пусто (тогда пользователь получает запрос)
echo set "x=%x%">>"~f0"
здесь ключ. Он добавляет set command
к пакетному файлу (%~f0
- полное имя пакетного файла), поэтому
call :getvar
возвращается с ранее установленной переменной %x%