任务计划程序:如何在输出文件的命名中使用cmd脚本?

问题描述

我有一个c:\myapp文件夹,其中包含MyProcess.exe文件。我也有c:\myapplog文件夹。

我在GetSuffix.cmd文件夹中有一个名为c:\myapp的cmd批处理文件,该文件计算一个值,然后在末尾回显该值。要返回的值是8个字符的长度。

@echo off
rem logic to set suffixV variable 
echo %suffixV%

我希望安排MyProcess.exe文件每天在特定时间运行。我想将其输出写为c:\myapplog文件夹中的MyProcess_XXXXXXXX.log文件,其中XXXXXXXX是一个字符串,其值需要来自GetSuffix.cmd文件

因此,在Task Scheduler中,我为此创建了一个Task。在此任务的操作启动程序中,我提到:

程序/脚本: cmd
添加参数(可选): / c MyProcess.exe> c:\ myapplog \ MyProcess_GetSuffix.cmd.log
开始于(可选): c:\ myapp

我运行了任务,并成功运行,但是它在MyProcess_GetSuffix.cmd.log文件夹中创建了c:\myapplog文件GetSuffix.cmd未评估。我该怎么办?


示例

例如,GetSuffix.cmd文件夹中名为c:\myapp的cmd批处理文件包含以下几行:

@echo off
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
set suffixV=%MyDate:~0,4%%MyDate:~4,2%%MyDate:~6,2%
echo %suffixV%

所以今天,如果我从cmd呼叫GetSuffix.cmd,它将返回 20200812

所以今天我希望我的任务以这种方式运行:

cmd /c MyProcess.exe > c:\myapplog\MyProcess_20200812.log

明天,如果我从cmd呼叫GetSuffix.cmd,它将返回 20200813

所以明天我希望我的任务以这种方式运行:

cmd /c MyProcess.exe > c:\myapplog\MyProcess_20200813.log

我该怎么做?

解决方法

我要说的是,安排一个运行“ run.cmd”的计划任务。将getsuffix更改为

@echo off
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
set suffixV=%MyDate:~0,4%%MyDate:~4,2%%MyDate:~6,2%
// OUTPUTS TO A FILE FOR FUTURE USE
echo %suffixV% > suffix.temp
// PRINTS SUFFIX VARIABLE
echo %suffixV%
// EXITS
exit

然后,将其用于run.cmd:

@echo off
// WILL GET SUFFIX NUMBER
getsuffix.cmd
// SETS SUFFIX NUMBER AS VARIABLE
set /p suffix=<suffix.temp
// USES VARIABLE TO NAME FILE 
cmd /c myprocess.exe > c:\myapplog\MyProcess_%suffix%.log
// DELETES THE EXTRA FILE
del suffix.temp
// EXITS
exit

或者,您可以将getsuffix.bat代码复制粘贴到计划的任务中,以使其全部成为一个文件。

希望这就是您想要的。