为第一次执行唯一标识windows命令输出



我每天从第三方工具每隔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未定义(尚未运行)或已定义(今天已经运行),这应该满足您的需求。

最新更新