如何在PuTTY / PSFTP批处理脚本中使用日期变量?

时间:2015-06-30 14:59:17

标签: putty

我喜欢在PuTTY / PSFTP批处理脚本中使用日期变量来选择文件名中包含特定时间戳的文件。

但我在docs中找不到任何内容。是否有 PuTTY / PSFTP批处理脚本命令使用日期变量,或者有没有办法将 Windows批变量传递给PSFTP?

文件如下所示:FILENAME_2015-06-25.TXT(基于当前日期)

这样的事情:

cd /subdir
get FILENAME_%year%-%month%-%day%.TXT
quit

Windows批处理文件中,我可以通过以下方式轻松获取当前日期:

SET YEAR=%DATE:~-4%
SET MONTH=%DATE:~-7,2%
SET DAY=%DATE:~-10,2%

ECHO FILENAME_%YEAR%-%MONTH%-%DAY%.TXT

1 个答案:

答案 0 :(得分:4)

您必须动态生成psftp脚本文件,如:

SET YEAR=%DATE:~-4%
SET MONTH=%DATE:~-7,2%
SET DAY=%DATE:~-10,2%

ECHO cd /subdir > script.txt
ECHO get FILENAME_%YEAR%-%MONTH%-%DAY%.TXT >> script.txt

psftp.exe -b script.txt ...

虽然注意%DATE%实际上不是一种可靠的方法来检索带有固定格式的时间戳,因为它的值随语言环境而变化。

您可以改用:

for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set LDT=%%j
ECHO get FILENAME_%LDT:~0,4%-%LDT:~4,2%-%LDT:~6,2%.TXT >> script.txt

详情请见:
How to get current datetime on Windows command line, in a suitable format for using in a filename?

或者从批处理文件(.bat)中使用WinSCP scripting(本机支持时间戳),如:

winscp.com /log=winscp.log /command ^
    "open ftp://username:password@host" ^
    "cd /subdir" ^
    "get FILENAME_%%TIMESTAMP#yyyy-mm-dd%%.TXT" ^
    "exit"

详见:

(我是WinSCP的作者)