我喜欢在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
答案 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的作者)