如何将具有多个变量的文本文件应用到批处理控制台
How to apply a text file with multiple variables to the batch console
好的,我有一个批处理程序,可以在我保存游戏时将角色的统计信息写入 txt 文件。但是我无法正确加载这些统计数据。我想也许如果我用控制台命令和语法正确保存它们,我可以使用 type 命令,它会 运行 命令将控制台上的变量设置为 txt 文件中的变量。有没有一种简单的方法,就像将所有变量写入txt文件但相反?
正在写入的变量示例代码:
if not exist "%~dp0\Users" md "Users" (
Echo set CharName=%UserCharacter%
Echo set Level=%Level%
Echo set Health=%Health%
Echo set ExpCap=%ExpCap%
)> "%~dp0\Users\%UserCharacter%.txt"
看到我这样写到文本文件中,以为我可以加载文件并将变量设置为文件所具有的内容。
没有成功。如果您有任何问题,请提问。我现在不能 post 图片,但我想我明白了我的意思。
你真的很接近。而不是 type
,运行 通过 for 循环的文本文件。
for /f "usebackq delims=" %%A in ("%~dp0\Users\%UserCharacter%.txt") do %%A
您拥有的 set
命令将自动 运行。
工作原理
for /f
循环接收命令、文件或字符串(在本例中为文件)并逐行处理该内容的输出。
usebackq
告诉 for
循环引号中的内容是文件 - 通常,传递到 for /f
循环中的带引号的字符串将被视为字符串,但是因为你的路径中有一个 space ,所以需要引用它以便循环不会抛出错误。
delims=
告诉循环不要分隔(拆分)文件中的每一行。通常,一条线被分割成白色space - spaces 和制表符。
%%A
是包含字符串中第一个定界标记的变量。但是,由于我们告诉循环不要分隔字符串,因此 %%A
包含整个字符串。
"%~dp0\Users\%UserCharacter%.txt"
是你的文件。
do
告诉循环,此后代码块其余部分的所有内容(该行的其余部分或该行 (
与第一个 [=23= 之间的任何内容) ] 在下一行)应该在循环仍在进行时执行。
%%A
在这种情况下是您存储在文本文件中的 set
命令。由于批处理替换和评估文本的方式,它实际上是 运行ning 您存储的命令!
您可以使用以下批处理文件保存变量:
@Echo off
if not exist "Users" md "Users"
if exist Users\%UserCharacter%.bat del Users\%UserCharacter%.bat
>>Users\%UserCharacter%.bat Echo @Echo off
>>Users\%UserCharacter%.bat Echo set CharName=%UserCharacter%
>>Users\%UserCharacter%.bat Echo set Level=%Level%
>>Users\%UserCharacter%.bat Echo set Health=%Health%
>>Users\%UserCharacter%.bat Echo set ExpCap=%ExpCap%
>>Users\%UserCharacter%.bat Echo Echo Variables loaded
Echo Variables saved
这会在 Users 子文件夹中创建一个名为 %UserCharacter%.bat 的批处理文件。
例如,如果您的角色名称是 Virtusal,则您可以通过键入 Users\Virtusal.bat.
来加载这些变量
好的,我有一个批处理程序,可以在我保存游戏时将角色的统计信息写入 txt 文件。但是我无法正确加载这些统计数据。我想也许如果我用控制台命令和语法正确保存它们,我可以使用 type 命令,它会 运行 命令将控制台上的变量设置为 txt 文件中的变量。有没有一种简单的方法,就像将所有变量写入txt文件但相反?
正在写入的变量示例代码:
if not exist "%~dp0\Users" md "Users" (
Echo set CharName=%UserCharacter%
Echo set Level=%Level%
Echo set Health=%Health%
Echo set ExpCap=%ExpCap%
)> "%~dp0\Users\%UserCharacter%.txt"
看到我这样写到文本文件中,以为我可以加载文件并将变量设置为文件所具有的内容。
没有成功。如果您有任何问题,请提问。我现在不能 post 图片,但我想我明白了我的意思。
你真的很接近。而不是 type
,运行 通过 for 循环的文本文件。
for /f "usebackq delims=" %%A in ("%~dp0\Users\%UserCharacter%.txt") do %%A
您拥有的 set
命令将自动 运行。
工作原理
for /f
循环接收命令、文件或字符串(在本例中为文件)并逐行处理该内容的输出。
usebackq
告诉 for
循环引号中的内容是文件 - 通常,传递到 for /f
循环中的带引号的字符串将被视为字符串,但是因为你的路径中有一个 space ,所以需要引用它以便循环不会抛出错误。
delims=
告诉循环不要分隔(拆分)文件中的每一行。通常,一条线被分割成白色space - spaces 和制表符。
%%A
是包含字符串中第一个定界标记的变量。但是,由于我们告诉循环不要分隔字符串,因此 %%A
包含整个字符串。
"%~dp0\Users\%UserCharacter%.txt"
是你的文件。
do
告诉循环,此后代码块其余部分的所有内容(该行的其余部分或该行 (
与第一个 [=23= 之间的任何内容) ] 在下一行)应该在循环仍在进行时执行。
%%A
在这种情况下是您存储在文本文件中的 set
命令。由于批处理替换和评估文本的方式,它实际上是 运行ning 您存储的命令!
您可以使用以下批处理文件保存变量:
@Echo off
if not exist "Users" md "Users"
if exist Users\%UserCharacter%.bat del Users\%UserCharacter%.bat
>>Users\%UserCharacter%.bat Echo @Echo off
>>Users\%UserCharacter%.bat Echo set CharName=%UserCharacter%
>>Users\%UserCharacter%.bat Echo set Level=%Level%
>>Users\%UserCharacter%.bat Echo set Health=%Health%
>>Users\%UserCharacter%.bat Echo set ExpCap=%ExpCap%
>>Users\%UserCharacter%.bat Echo Echo Variables loaded
Echo Variables saved
这会在 Users 子文件夹中创建一个名为 %UserCharacter%.bat 的批处理文件。 例如,如果您的角色名称是 Virtusal,则您可以通过键入 Users\Virtusal.bat.
来加载这些变量