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

How to use date variables in PuTTY/PSFTP batch-script?

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

但我在 docs 中找不到任何内容。 PuTTY/PSFTP batch-script 是否有使用 date-variables 的命令,或者有没有办法通过 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

您必须像这样动态生成 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的作者)