【发布时间】:2020-10-26 18:38:16
【问题描述】:
在 Windows Server 2008r2 环境中,我有作为计划任务运行的 CMD 文件(不是 Powershell)。我正在寻找一种实现逻辑的方法: "如果此命令在过去十次运行中都出现此错误情况,请执行一些操作(如发送短信)"
所以我想实现一个持久计数器来存储 CMD 之前运行的错误计数。
我在系统环境中搜索了设置值,(SETX)但它似乎稍后生效并且还有其他缺点。 或者,可以通过编写文件 1.txt、2.txt 等来实现持久计数器,但这看起来既复杂又难看。
这两种方法中的任何一种都可能需要足够的时间和精力,但我想我会在这里检查一下,以防有人以前做过类似的事情。有没有人有一种更优雅的方式来实现一个计数器,该计数器的状态在 Windows CMD 文件的单独运行之间持续存在?
通常当我写完一个问题时,我会看到类似问题中已经显示了答案,但在这种情况下我没有,所以我会继续发布。
【问题讨论】:
-
让我们假设用作计数器的环境变量的名称为
Counter。然后您可以在批处理文件中使用>"%APPDATA%\%~n0.ini" echo Counter=%Counter%将环境变量的当前值保存到一个文本文件中,该文件名为批处理文件,文件扩展名为.ini在应用程序数据目录中,然后退出批处理文件并使用if exist "%APPDATA%\%~n0.ini" (for /F "usebackq delims=" %%I in ("%APPDATA%\%~n0.ini") do set "%%I") else set "Counter=0"重新加载具有 INI 文件中最后一个值的变量,并在 bat 文件顶部定义具有加载值的变量Counter。 -
设置
%_counter%然后尝试使用%counter%不是很有帮助。 -
@Stephan,你是对的 - 我误读了 SET /A 上的 ss64 文本,上面写着“SET /A 允许您省略 % 的所以 _myvar 而不是 %_myvar%”作为“SET /A 允许您省略 %,所以 _myvar 而不是 %myvar%" IE 我认为 _ 是而不是 %。
标签: batch-file environment-variables windows-server-2008-r2