0

私の目標は、6 つの変数 (q、d、n、p、tc、td) を更新するたびにテキスト ファイルに保存し (成功)、再度開くと、テキスト ファイルに基づいて変数が自動的に設定されるプログラムを作成することです。したがって、最後に閉じたときに tc が 13 だった場合、1 週間後に開いた場合でも 13 になります (テキスト ファイルが変更されていないと仮定して) このコードを実行しようとすると、問題が発生します。

:Load
set v=0
FOR /F "usebackq delims=" %%a in ("SavedData.txt") do (
set /a var+=1
set var!v!=%%a
)
set q=%var1%
set d=%var2%
set n=%var3%
set p=%var4%
set td=%var5%
set tc=%var6%
goto main

次のエラーが発生します。

9 was unexpected at this time.

何か案は?(ちなみに、エラーが表示されたとき、9に等しい値はありませんでした)

編集:私はそれを機能させましたが、今では各変数の最後に余分なスペースがあり、それを削除して適切に機能させることができます。

set /a v+=1代わりに入力することで機能しましたset /a var+=1

4

3 に答える 3

2

エラー メッセージが発生しているとは思いませんが、コードにバグが見られます。をインクリメントvarしようとすると、インクリメントしていますv。そのバグがあなたが説明したエラーメッセージをどのように表示するかわかりませんが、明らかに問題が発生し、コードの他の場所でエラーが発生する可能性があります.

ロード ルーチンは、はるかに単純になる可能性があります。

:Load
<"SavedData.txt" (for %%V in (q d n p td tc) do set /p "%%V=")
于 2013-02-27T02:29:30.527 に答える
1

dbenhamが言ったように、ロードルーチンははるかに単純である可能性があります。この回答では、おそらく見上げるだけでよいため、簡単にする方法については説明しません(debnhamの回答が私の回答よりも多くの賛成を得ていると仮定します)。この答えからわかるのは、変数の値に余分なスペースがある理由です。

さて、これが起こっている理由を私が考えることができる唯一の理由は、コードのどこか(おそらく:saveシーケンス)に、次のようなコードがあるためです。

echo value_of_q >> "SavedData.txt"
::More stuff here...

問題は、ステートメントの終了前のスペース(echo value_of_q)とリダイレクト(>> "SavedData.txt")です。これにより、コマンドの出力(スペースを含む)が。の最後に追加されますSavedData.txt

これで、2つのオプションのいずれか(または両方)でこれを回避できます。

オプション1.スペースをトリミングします。echo value_of_q>> "SavedData.txtあなたが持っていたものの代わりにそれを作ってください。

オプション2。変数の値が別々の行にあると仮定すると、ループdelims内でオプションを削除できます(オプションも削除できます)。forusebackq

したがって、forループは次のようになります...

for /f "usebackq" %%i in ("SavedData.txt") do (
    ::Rest of your code here...
    ::Oh, and your code blocks should be indented as well.
)

ご覧のとおり、をに変更し%%aました%%i。これはループには必要ありませんが、将来エラーが発生しない可能性があるため、お勧めします。

お役に立てば幸いです。

于 2013-02-27T05:37:24.197 に答える
1

はるかに簡単な方法は、変数値だけでなく完全なコマンドを含めることにより、保存ファイルをファイルでは.batなく 1 つにすることです。これには、ロード コードが保存された値の順序に依存しないという利点があります (保存コードも)。たとえば、変数を保存するコードは次のようになります。.txtset

:Save
(for %%v in (q d n p td tc) do echo set %%v=!%%v!) > "SavedData.bat"

これは、保存された値を回復するためのコードです。

:Load
call "SavedData.bat"

アントニオ

于 2013-02-27T06:29:30.547 に答える