2016-04-10 2 views
0

最近「Dictator」というゲームをプレイし、バッチスクリプトで再作成したかったのです。私は問題に遭遇したときにそれを作成し始めたばかりです。ユーザーが進行状況を保存してロードできるようにするプログラムを作っています。私は別のプログラムからこのコードをコピーし、それを私の中に入れました。保存はうまくいくようですが、保存ファイル(.cmd)を編集して保存された変数の1つを編集すると、そのファイルをロードしても何も起こらないようです。たとえば、key.cmdという名前のファイルを1つ保存し、 "pol"変数を100に相当するように編集しました。このファイルをロードすると、ロードされたとは言いましたが、pol変数はまだデフォルト(10)に設定されていました。私は保存と呼ばれるフォルダを作成し、key.cmdファイルが内部にあるので、私は理解できません。私は過去に複数回保存とロードコードを使用していましたが、問題は一度もありませんでした。助けてください!私のコードは以下の通りです:バッチファイルから.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 
+3

あなたはあなたのコードでは、あなたがスペルミス、また[遅れ拡張トラップ](http://stackoverflow.com/a/30284028/2152082) – Stephan

答えて

0

:Loadで、ファイル名にスペースを入れる必要があります。ほとんどのユーザーはこの弱点を知りませんが、空白(および他のいくつかの特殊文字)を壊さずにユーザー入力で読み取るには、バッチファイルの先頭に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 
+0

に落ちました'Buissnes Men'としての 'ビジネスマン'。 –

+0

私のゲームの読み込み機能はまだ動作していないようですが、Pの誤植に助けてくれてありがとうございます。私はあなたのすべてのコードを私の上に貼り付けて、まだそれを動作させていません。それを動作させたのは、%pol%を!pol!に変更したときです。なぜこれが当てはまるのか、それを回避する方法についての示唆はありますか? – Vansh03

+0

@MatthewHorvathあなたは '%pin%'を '!pin!'に変更しましたが、それは必要ではありません。遅延が必要なこのコードの唯一の変数は ':load'サブルーチン内の' pol'です – Stephan