我想使用WinSCP命令行管理(上传\下载\删除)FTP服务器上的文件。
它说我可以使用环境变量!我有一些文本文件,其名称中包含日期。
我刚创建了我想要的变量:
Test_%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%.txt
并使用Windows echo
命令对其进行测试。它变为Test_20140916.txt
,这正是我现在拥有的。
但是当我尝试在WinSCP中上传该文件时,我收到此错误:
winscp> put D:\FTP\Test_%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%.txt
File or folder 'D:\FTP\Test_%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%.txt' does not exist.
System Error. Code: 123.
The filename, directory name, or volume label syntax is incorrect
(A)bort, (R)etry, (S)kip, Ski(p) all:
知道如何解决此问题吗?
答案 0 :(得分:0)
WinSCP本身支持timestamp formatting:
put D:\FTP\Test_%TIMESTAMP#yyyymmdd%
解释为什么你的语法不起作用:虽然WinSCP支持脚本命令中的环境变量,但它只支持基本语法%NAME%
,如下所述:
https://winscp.net/eng/docs/scripting#syntax
要实现,您需要什么,您必须将值解析为另一个变量并在WinSCP命令中引用它:
set STAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%
winscp.com /script=script.txt
其中script.txt
可以使用%STAMP%
:
put D:\FTP\Test_%STAMP%
另请注意,%DATE%
的值是特定于语言环境的,因此请确保在要使用它的同一语言环境中测试代码。或者甚至更好,使用独立于区域设置的wmic os get LocalDateTime
:
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set LDT=%%j
set STAMP=%LDT:~0,4%%LDT:~4,2%%LDT:~6,2%