作为常规文件上传过程的一部分,我们通过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
感谢。很高兴提供可能需要的任何进一步细节。
答案 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