Scripting 如何在WinSCP命令中使用带环境变量值的字符串处理?

Scripting 如何在WinSCP命令中使用带环境变量值的字符串处理?,scripting,command,environment-variables,winscp,Scripting,Command,Environment Variables,Winscp,我想使用WinSCP命令行在FTP服务器上管理(上载\下载\删除)文件 它说我可以使用环境变量!我有一些文本文件的名字里有日期 我刚刚创建了我想要的变量: Test_%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%.txt 并用Windowsecho命令对其进行了测试。它变成了Test_20140916.txt,这正是我现在拥有的 但是,当我尝试在WinSCP中上载该文件时,出现以下错误: winscp> put D:\FTP\Test_%DATE:~10,4%%D

我想使用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:
知道如何解决此问题吗?

WinSCP支持本机:

put D:\FTP\Test_%TIMESTAMP#yyyymmdd%

解释语法不起作用的原因:尽管WinSCP支持脚本命令中的环境变量,但它只支持基本语法
%NAME%
,如文档所示:

要实现所需的功能,必须将该值解析为另一个变量,并在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%