为首次执行唯一标识Windows命令输出

时间:2016-04-07 08:24:19

标签: command-line command command-prompt

我每天从第三方工具每隔1小时执行一次命令。 我要求确定该命令是第一次执行。 好像它第一次执行我需要去任务' A'如果没有那么任务' B'

e.g。 命令:

  

净开始

输出

  

首次执行

[要标识的一些标志,因为这是第一次输出]

测试

  

下一步执行

测试

所以在这种情况下,我能够确定它是否是第一次执行。

1 个答案:

答案 0 :(得分:0)

@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视为未定义(尚未运行)或已定义(已在今天运行),以满足您的需求。