无法从批处理文件加载 .cmd

Unable to load a .cmd from a batch file

我最近玩了游戏 "Dictator" 并想在批处理脚本中重新创建它。当我 运行 遇到问题时,我才开始创建它。我已经制作了允许用户保存他们的进度并加载它的程序。我从另一个程序复制了这段代码并将其放入我的程序中。保存似乎有效,但是当我编辑保存文件 (.cmd) 并编辑其中一个保存的变量时,一旦我加载该文件,似乎什么也没有发生。例如,我保存了一个名为 key.cmd 的文件并对其进行了编辑,使 "pol" 变量等于 100。加载该文件后,它确实显示已加载,但 pol 变量仍设置为默认值 (10) .我不明白,因为我创建了一个名为 save 的文件夹,其中包含 key.cmd 文件。我过去曾多次使用我的保存和加载代码,但从未遇到过任何问题。请帮忙!这是我的代码:

:Setup
@echo off
title Dictator
color 0a

:Save Variables
set pol=10
set bui=10
set low=10
set cor=10
set peo=10
set cri=10

:Main
cls
echo 1 - Save
echo 2 - Load
echo 3 - Police - %pol%
echo 4 - Buissnes Men - %bui%
echo 5 - Lower Government - %low%
echo 6 - Corruption - %cor%
echo 7 - People - %peo%
echo 8 - Criminals - %cri%
choice /c 12345678 /n /m ">>> "
if %errorlevel% equ 1 goto Save
if %errorlevel% equ 2 goto load

:Save
cls
set /p pin="PIN: "
(
echo set pol=%pol%
echo set bui=%bui%
echo set low=%low%
echo set cor=%cor%
echo set peo=%peo%
echo set cri=%cri%
) >> saves\%pin%.cmd
echo SAVED
pause >nul
goto main


:Load
cls
set /p pin="PIN: "
if exist saves\%pin%.cmd (
    call saves\%pin%.cmd
    echo %pol%
    echo LOADED
    pause >nul
) else (
    echo INCORRECT PIN
    pause >nul
)
goto main

:Load 您需要在文件名中允许空格。大多数用户不会知道这个弱点,但是为了允许在不破坏用户输入的情况下读取空格(和其他一些 'special' 字符),您需要将 setlocal enableextensions enabledelayedexpansion 添加到在批处理文件的开头,将 set /p pin="PIN: " 语句变为 set /p "pin=PIN: ",并在需要 %pin% 的地方将 % 替换为 !。 最后,您的代码应如下所示:

:Setup
setlocal enableextensions enabledelayedexpansion
@echo off
title Dictator
color 0a

:Save Variables
set pol=10
set bui=10
set low=10
set cor=10
set peo=10
set cri=10

:Main
cls
echo 1 - Save
echo 2 - Load
echo 3 - Police - %pol%
echo 4 - Buissnes Men - %bui%
echo 5 - Lower Government - %low%
echo 6 - Corruption - %cor%
echo 7 - People - %peo%
echo 8 - Criminals - %cri%
choice /c 12345678 /n /m ">>> "
if %errorlevel% equ 1 goto Save
if %errorlevel% equ 2 goto load

:Save
cls
set /p "pin=PIN: "
(
echo set pol=%pol%
echo set bui=%bui%
echo set low=%low%
echo set cor=%cor%
echo set peo=%peo%
echo set cri=%cri%
) >> saves\!pin!.cmd
echo SAVED
pause >nul
goto main


:Load
cls
set /p "pin=PIN: "
if exist saves\!pin!.cmd (
    call saves\!pin!.cmd
    echo %pol%
    echo LOADED
    pause >nul
) else (
    echo INCORRECT PIN
    pause >nul
)
goto main