Windows 计划批处理文件,但不将文件重命名为使用%date%和%time%变量指定的名称

Windows 计划批处理文件,但不将文件重命名为使用%date%和%time%变量指定的名称,windows,batch-file,server,scheduled-tasks,taskscheduler,Windows,Batch File,Server,Scheduled Tasks,Taskscheduler,作为常规文件上载过程的一部分,我们通过Windows任务调度器运行.bat文件。它打开WinSCC并使用配置文件运行它 然后,它将CD刻录到存储上载的文件中,重命名该文件,然后将其移动到存档文件中 如果在退出之前手动运行程序并暂停,则程序工作正常。当前正在将文件从上载转储到存档,而没有使用附加的时间和日期对其进行重命名 @echo off "C:\Program Files (x86)\WinSCP\winscp.com" /script=CONFIG.txt cd C:\SCHEDULED

作为常规文件上载过程的一部分,我们通过Windows任务调度器运行.bat文件。它打开WinSCC并使用配置文件运行它

然后,它将CD刻录到存储上载的文件中,重命名该文件,然后将其移动到存档文件中

如果在退出
之前手动运行程序并暂停
,则程序工作正常。当前正在将文件从上载转储到存档,而没有使用附加的时间和日期对其进行重命名

@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

谢谢。很高兴提供可能需要的更多详细信息。

由于缺乏更多信息,我建议

ren *.csv "CL6019_%time:~0,2%%time:~3,2%%date:~-10,2%%date:~3,2%%date:~-4,4%.csv"
我们应该解决这个问题。如果没有,则回显这一行,然后暂停脚本

可能您的
time
格式,或者任务调度器运行作业时用户使用的
time
格式被设置为一位数小时,这将用空格替换时间中的前导
0
,因此原始的
ren
函数会看到三个参数,而不是两个


当然,如果您尝试在正常工作时间内调试,在上午10:00或更高时间喝咖啡后,时间将不包含空间,因此它似乎可以用于测试。

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

winscp_script.bat > c:\writable\path\winscp_script.log
第二天,检查日志文件是否有任何错误


一般来说,您不应该依赖于
%TIME%
%DATE%
变量,因为它们的格式是特定于语言环境的。运行Windows计划程序任务的本地帐户的区域设置可能与用于测试批处理文件的区域设置不同。不仅您得到了一个错误的名称,而且如果生成的格式包含空格,它将完全破坏
ren
命令(正如@Magoo所建议的)

,因此您可以执行以下操作:

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

它将在明天早上5点30分再次运行。我添加了“”,我们可以看看这是否有效。我明天早上回来报到。谢谢我建议您将,
%date:~3,2%
更改为
%date:~-7,2%
,以保持相同的格式。非常感谢。我没有考虑当地时间对我的节目的影响。这一个不应该成为问题,因为它只是一个运行在隔壁房间的单个服务器上的归档文件。但将来我肯定会选择UTC。我将在我的下一个项目中试用“locale”的时间戳特性,我不是指时区(尽管这确实也是一个问题)。我指的是现场时间格式。您正在使用的帐户可能具有例如英国时间格式
dd/mm/yyyy
,而调度程序帐户可能具有美国时间格式
mm/dd/yyyy
或其他格式。12小时制和24小时制的时间格式也会有所不同。啊,我明白了!