安排批处理文件不将文件重命名为使用%date%和%time%variables指定的名称

时间:2018-02-20 21:24:21

标签: windows batch-file server scheduled-tasks taskscheduler

作为常规文件上传过程的一部分,我们通过Windows任务计划程序运行.bat文件。它打开WinSCP并使用配置文件运行它。

然后cds到存储上传的文件,重命名,然后将其移动到存档文件。

如果我在pause之前使用exit手动运行程序,则可以正常运行。目前只是将文件从上传转储到存档,而不用附加时间和日期重命名。

@echo off

"C:\Program Files (x86)\WinSCP\winscp.com" /script=CONFIG.txt

cd C:\SCHEDULEDQUERIES\PressGaney\Upload

ren *.csv CL6019_%time:~0,2%%time:~3,2%%date:~-10,2%%date:~3,2%%date:~-4,4%.csv

move *.csv C:\SCHEDULEDQUERIES\PressGaney\archive

exit

感谢。很高兴提供可能需要的任何进一步细节。

2 个答案:

答案 0 :(得分:2)

由于缺乏进一步的信息,我建议

ren *.csv "CL6019_%time:~0,2%%time:~3,2%%date:~-10,2%%date:~3,2%%date:~-4,4%.csv"

应该解决问题。如果没有,请echo此行,然后pause脚本。

也许您的time格式 - 或任务调度程序正在运行作业的用户使用的time格式 - 设置为单位数小时,这取代了领先0在有空格的时间内,原来的ren函数会看到三个参数,而不是两个。

当然,如果您在正常工作时间尝试调试此功能,在早上10点或更晚的咖啡之后,时间将不包含空间,因此它似乎适用于您的测试。

答案 1 :(得分:1)

将批处理文件换行到另一个并将其完整输出重定向到日志文件:

winscp_script.bat > c:\writable\path\winscp_script.log

第二天,检查日志文件是否有任何错误。

通常,您不应该依赖%TIME%%DATE%变量,因为它们的格式是特定于区域设置的。运行Windows计划程序任务的本地帐户可以使用与用于测试批处理文件的语言环境不同的语言环境。不仅你得到一个错误的名字,但如果结果格式包含空格,它将完全破坏ren命令(正如@Magoo已经建议的那样)。

WinSCP itself has a built-in feature for time formatting,所以你可以这样做:

set TIMESTAMP_FORMAT=hhnnddmmyyyy

pushd "C:\Program Files (x86)\WinSCP"
for /F "tokens=* USEBACKQ" %%F in (
    `winscp.com /command "echo %%TIMESTAMP#%TIMESTAMP_FORMAT%%%" "exit"`
) do set TIMESTAMP=%%F
popd

echo %TIMESTAMP%
ren *.csv CL6019_%TIMESTAMP%.csv