我的目标是有一个程序,每次更新一个文本文件时保存6个变量(q,d,n,p,tc,td)(成功),重新打开时会自动设置变量文本文件。因此,如果tc在上次关闭时等于13,如果我在一周之后打开它,它仍将等于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
答案 0 :(得分:2)
我认为错误消息不会发生在您认为的位置,但我确实在您的代码中看到了错误。当您打算增加var
时,您正在递增v
。我不知道该错误如何能够提供您描述的错误消息,但它显然会导致问题,并可能导致代码中的其他错误。
您的加载例程可以更加简单。
:Load
<"SavedData.txt" (for %%V in (q d n p td tc) do set /p "%%V=")
答案 1 :(得分:1)
正如dbenham所说,你的装载程序可能会简单得多。这个答案不会讨论如何让它变得更简单,因为你应该只是抬头(假设debnham的答案比我的答案更多)。这个答案告诉你的是为什么你的变量的值中有额外的空格。
现在,我能想到为什么会发生这种情况的唯一原因是因为代码中的某个地方(可能是:save
序列),你的代码看起来像这样:
echo value_of_q >> "SavedData.txt"
::More stuff here...
问题是语句结束前的空格(echo value_of_q
)和重定向(>> "SavedData.txt"
)。这会将命令的输出(包括任何空格)附加到SavedData.txt
的末尾。
现在,您可以通过两个选项之一(或两者)来避免这种情况。
选项1。
你修剪空间。将它设为echo value_of_q>> "SavedData.txt
而不是你拥有的。
选项2。
假设变量的值在不同的行上,您可以删除delims
循环中的for
选项(您也可以删除usebackq
选项。)
因此,您的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
,这对于您的循环来说不是必需的,但这是一种很好的做法,因为它可能会在将来避免错误。
希望有所帮助。
答案 2 :(得分:1)
更简单的方法是通过包含完整的.bat
命令而不仅仅是变量值,使保存文件成为.txt
一个而不是set
文件;这样做的好处是加载代码不依赖于保存值的顺序(也不依赖于保存代码)。例如,这将是保存变量的代码:
:Save
(for %%v in (q d n p td tc) do echo set %%v=!%%v!) > "SavedData.bat"
这将是恢复已保存值的代码:
:Load
call "SavedData.bat"
安东尼奥