【问题标题】:Batch files update even though content not saved/updated即使内容未保存/更新,批处理文件也会更新
【发布时间】:2022-01-07 11:49:55
【问题描述】:

假设我在 Windows 10 上有一个包含以下内容的批处理文件:

:loop
echo start
timeout /t 100 /nobreak
goto :loop

如果我从命令行运行批处理文件,它会按预期每 100 秒回显一次 start

如果我编辑批处理文件但不保存它,计时器会更新。所以我可以将其编辑到 10 秒,start 将每 10 秒打印一次。

这在两个层面上对我来说毫无意义:

  • 确定循环已加载到内存中然后运行?即使我保存了对文件的更改,脚本也应该在第一次加载时执行,而不是每次都检查批处理文件的内容?
  • 脚本如何知道我对文件所做的编辑,如果它们没有被保存和定稿?我正在使用 Sublime Text,并没有以任何方式更改文件。

【问题讨论】:

  • surely the loop is loaded into memory and then just run? - 不。解析器从文件加载每一(逻辑)行,在加载下一行之前执行它从文件
  • 不太清楚,您要达到什么目的 - 我运行了您的文件,它正在回显开始,然后等待 100 秒并无限重复循环。也许您发布了您正在谈论的编辑?
  • 我不知道 Sublime Text,但在 documentation 中找到了一个 save_on_focus_lost 设置,这将回答您的第二个问题。
  • 我想我理解他的问题 - sublime text 使它能够在您输入并保存后立即自动运行代码,编译器会自动重新启动程序/ webapp。可能是不可能的批处理文件?
  • @Stephan 看来你是对的。我已激活save_on_focus_lost。我想我从来没有注意到它,因为其他语言一次加载整个文件而不是逐行加载。

标签: batch-file windows-10


【解决方案1】:

这是因为命令提示符会重新读取批处理文件,而不是将其保存到内存中。所以每次你跳转到一个新标签(在这个例子中是:loop)时,它都会重新读取它下面的内容。如果要使用新标签,同样适用。批处理将重新读取标签中的所有内容。此外,另一种可能性是您已开启自动保存功能。

【讨论】:

  • 如果我保存文件但我没有保存,那将是有意义的。并且没有自动保存。 Sublime Text 仍将文件显示为具有未保存的更改。
猜你喜欢
  • 2018-03-25
  • 2016-04-11
  • 1970-01-01
  • 2021-04-28
  • 2012-01-16
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 2013-03-03
相关资源
最近更新 更多