【问题标题】:when writing to a file cmd just crashes写入文件时 cmd 只是崩溃
【发布时间】:2020-06-09 11:58:11
【问题描述】:

我正在批量制作游戏,但是当我尝试写入文件时,cmd 会崩溃。我正在写入文件以保存数据。这样用户就可以回来加载它。

创建用户代码块:

:cruser1
cls
set /a created=1
echo(
set /p name=Enter The Name of The User:: 
goto save

加载用户代码块:

:loaduser
cls
set /a created=0
echo(
set /p loaduser=Enter The Name of The User to Load:: 

if exist "%loaduser%.dll" (
    < %loaduser%.dll (
        set /p MHP=
        set /p HP=
        set /p DMG=
        set /p GOLD=
        set /p EXP=
        set /p LVL=
        set /p MEXP=
    )
    goto menu
)

if not exist "%loaduser%.dll" (
    echo File not found.
    timeout /t 3 /NOBREAK >nul
    goto loaduser
)

保存数据代码块:

:save
cls
echo(
if %created% equ 1(
    (
        echo %MHP%
        echo %HP%
        echo %DMG%
        echo %GOLD%
        echo %EXP%
        echo %LVL%
        echo %MEXP%
    ) > %name%.dll
    attrib +h "%name%.dll"
    goto menu
)
if %created% equ 0(
    (
        echo %MHP%
        echo %HP%
        echo %DMG%
        echo %GOLD%
        echo %EXP%
        echo %LVL%
        echo %MEXP%
    ) > %loaduser%.dll
    attrib +h "%loaduser%.dll"
    goto menu
)

有谁知道如何解决这个问题以及为什么会这样?

编辑:我调试了它,在保存回显it worked后,在我杀死敌人后,它确实说it worked,但也说Access is denied。 希望这会有所帮助。

【问题讨论】:

  • if %created% equ 1( 更改为if %created% equ 1 ((注意空格)。无论如何,请学习如何调试批处理文件 - 请参阅 thisthisthis。非常重要:打开命令提示符窗口并通过输入其路径/名称从那里运行批处理文件,这样您就可以阅读潜在的错误消息......
  • 谢谢!那行得通,但在我的代码中,我忘了提到我已经让它工作了,但它实际上并没有保存。它仍然没有保存。
  • 您似乎要求最终用户输入一个名称,该名称随后用作保存已保存数据的.dll 文件的名称。如果最终用户提供了一个已经存在的名称,会发生什么?还是不能在 Windows 中用作合法文件名的名称?或包含空格或其他可能有问题的字符?
  • 另外,由于这已经是您今天对同一脚本的第二个问题,如果您要提供所有内容的链接,也许会更有意义,以便那些有兴趣提供帮助的人可以提供适合整个事情的解决方案,而不是执行一系列较小的、可能有冲突或效率低下的修复。此外,当您在 cmets 中收到建议(然后告诉我们您已实施)时,您需要更新问题中的代码,以便新读者知道他们看到的代码与剩余问题相关/问题。
  • 我必须要问,您在尝试写入操作之前是否更改了 attrib -H?因为如果您在文件仍设置为隐藏属性的情况下尝试写入文件,则写入操作将失败并返回访问被拒绝错误

标签: batch-file cmd


【解决方案1】:

你有错误的括号,问题一。问题 2 无法测试现有隐藏文件的存在性

If exist "%loaduser%.dll" attrib -h "%loaduser%.dll"
if %created% equ 0 (
    echo %MHP%
    echo %HP%
    echo %DMG%
    echo %GOLD%
    echo %EXP%
    echo %LVL%
    echo %MEXP%
) > %loaduser%.dll
attrib +h "%loaduser%.dll"
goto menu

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 2016-09-07
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2022-06-15
    相关资源
    最近更新 更多