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

Posted

技术标签:

【中文标题】计划批处理文件不将文件重命名为使用 %date% 和 %time% 变量指定的名称【英文标题】:Schedule batch file not renaming file to name specified using %date% and %time% variables 【发布时间】:2018-07-31 08:35:54 【问题描述】:

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

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

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

@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

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

【问题讨论】:

我建议您将%date:~3,2% 更改为%date:~-7,2% 以保持相同的格式。 【参考方案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

【讨论】:

非常感谢。我没有考虑本地时间对我的程序的影响。这个永远不会成为问题,因为它只是在隔壁房间的单个服务器上运行的存档。但将来我肯定会选择UTC。我将在我的下一个项目中尝试时间戳功能link “语言环境”并不是指时区(尽管这也确实是个问题)。我的意思是语言环境时间格式。例如,您使用的帐户可能具有英国时间格式dd/mm/yyyy,而调度程序帐户可能具有美国时间格式mm/dd/yyyy 或其他格式。时间格式也会有所不同,在 12 小时制和 24 小时制之间。 啊我明白了!【参考方案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:00 或更晚的早晨咖啡之后,时间将不包含空间,因此它似乎适用于您的测试。

【讨论】:

它将在明天 0530 再次运行,我添加了“”,我们可以看看它是否有效。我明天早上回来汇报。谢谢!

以上是关于计划批处理文件不将文件重命名为使用 %date% 和 %time% 变量指定的名称的主要内容,如果未能解决你的问题,请参考以下文章

将文件重命名为创建时间(仅限批处理文件)

Linux将文件重命名为当前日期/时间

在目录/子目录中生成文件文件夹 list.txt 文件并在批处理文件中使用 dir 和 ren 命令将 list.txt 重命名为文件夹/子文件夹名称

添加任务计划

将文件重命名为哈希和扩展名

如何将文件重命名为另一个文件系统?