计划批处理文件不将文件重命名为使用 %date% 和 %time% 变量指定的名称
Schedule batch file not renaming file to name specified using %date% and %time% variables
作为常规文件上传过程的一部分,我们通过 Windows 任务计划程序 运行 一个 .bat 文件。它打开 WinSCP 并使用配置文件 运行s 它。
然后它会 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
谢谢。很高兴提供任何可能需要的进一步细节。
由于缺乏进一步的信息,我建议
ren *.csv "CL6019_%time:~0,2%%time:~3,2%%date:~-10,2%%date:~3,2%%date:~-4,4%.csv"
应该可以解决问题。如果没有,echo
这一行,然后 pause
脚本。
也许您的 time
格式 - 或者任务计划程序 运行 用户使用的 time
格式 - 设置为 single-digit 小时,它将时间中的前导 0
替换为 space,因此原始 ren
函数看到三个参数,而不是两个。
当然,如果您尝试在正常工作时间调试它,在 10:00 或更晚的早晨喝咖啡后,时间将不包含 space,因此它似乎可以与你的测试。
将批处理文件包装到另一个文件并将其完整输出重定向到日志文件:
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
作为常规文件上传过程的一部分,我们通过 Windows 任务计划程序 运行 一个 .bat 文件。它打开 WinSCP 并使用配置文件 运行s 它。
然后它会 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
谢谢。很高兴提供任何可能需要的进一步细节。
由于缺乏进一步的信息,我建议
ren *.csv "CL6019_%time:~0,2%%time:~3,2%%date:~-10,2%%date:~3,2%%date:~-4,4%.csv"
应该可以解决问题。如果没有,echo
这一行,然后 pause
脚本。
也许您的 time
格式 - 或者任务计划程序 运行 用户使用的 time
格式 - 设置为 single-digit 小时,它将时间中的前导 0
替换为 space,因此原始 ren
函数看到三个参数,而不是两个。
当然,如果您尝试在正常工作时间调试它,在 10:00 或更晚的早晨喝咖啡后,时间将不包含 space,因此它似乎可以与你的测试。
将批处理文件包装到另一个文件并将其完整输出重定向到日志文件:
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