我每天从第三方工具每隔1小时执行一次命令。我有一个要求,以确定该命令是第一次执行。就好像它第一次执行一样,我需要去任务"A",如果不是,那么任务"B"
例如。命令:
净启动
输出
首次执行
[某些标志识别为这是第一次输出]
测试
下一次执行
测试
所以在这种情况下,我可以确定它是否是第一次执行。
@ECHO OFF
SETLOCAL
:: mainline - test first/not first
CALL :testfirst ###
IF DEFINED alreadyrun (ECHO ### already run) ELSE (ECHO ### first run)
CALL :testfirst $$$
IF DEFINED alreadyrun (ECHO $$$ already run) ELSE (ECHO $$$ first run)
CALL :testfirst ###
IF DEFINED alreadyrun (ECHO ### already run) ELSE (ECHO ### first run)
CALL :testfirst $$$
IF DEFINED alreadyrun (ECHO $$$ already run) ELSE (ECHO $$$ first run)
GOTO :eof
:testfirst
SET "targetdir=U:destdir"
SET "alreadyrun=%date:/=-%"
IF EXIST "%targetdir%%alreadyrun%.%1" GOTO :eof
DEL "%targetdir%*.%1" 2>NUL >nul
echo,>"%targetdir%%alreadyrun%.%1"
SET "alreadyrun="
GOTO :EOF
您需要更改targetdir
的设置以适应您的情况。U:destdir
适合我的系统。
这里的想法是建立一个特殊的目录来保存相关数据。我选择了u:destdir
,因为这对我来说很方便。%temp%
或%tmp%
可能是一个明显的选择,但它们可以随时任意清除,所以可能不是最好的。
主线部分显示了正在"运行"的两个不同的过程,称为###
和$$$
——它们的名称并不重要,几乎可以是任何您喜欢的名称。关键部分是:testfirst
子程序(我已经将其作为内部子程序编写,但如果您愿意,可以是一个独立的批处理文件-只需将call :testfirst
更改为call testfirst
)
此例程将变量alreadyrun
设置为当前日期,其中/
字符转换为-
,因为/
不是有效的文件名字符。
然后查看文件(转换日期)是否为。%1存在于所选目录中(其中,%1被提供的参数-示例中的###
和$$$
替换)。如果是,只需终止例程并将alreadyrun
设置为一个值即可返回。
如果该文件不存在,请从目录中删除任何具有相同###
扩展名的文件(它们是昨天或之前创建的),然后创建一个新文件(今天)。###文件然后删除环境变量alreadyrun
。
调用路由将看到alreayrun
未定义(尚未运行)或已定义(今天已经运行),这应该满足您的需求。