我每天从第三方工具每隔1小时执行一次命令。 我要求确定该命令是第一次执行。 好像它第一次执行我需要去任务' A'如果没有那么任务' B'
e.g。 命令:
净开始
输出
首次执行
[要标识的一些标志,因为这是第一次输出]
测试
下一步执行
测试
所以在这种情况下,我能够确定它是否是第一次执行。
答案 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
视为未定义(尚未运行)或已定义(已在今天运行),以满足您的需求。