如何将AutoIt脚本中的用户输入传递给WinSCP?

问题描述:

我在用WinSCP创建一个使用AutoIt的FTP传输脚本如何将AutoIt脚本中的用户输入传递给WinSCP?

我正在使用winscp.com。

我想从用户(通过GUI)接受输入,然后在我的WinSCP命令中使用这些输入。

例如,我想根据用户的选择设置本地目录。

当前情况:我可以存储用户的输入,但是当我尝试在使用AutoIt脚本的WinSCP命令控制台中传递相同的输入时,它不会读取变量或者只是给出和未知的命令错误。

RunWait(@ComSpec & ' /k ' & 'winscp.com /command "option batch continue" ' & '"option confirm off" ' & ' "open xyz"' & ' "lcd" ' & $Dir) 

$Dir具有用于使用GUICtrlRead()存储的用户输入的值。

请建议是否有任何其他方式让WinSCP控制台读取我的用户数据(我希望每次都由用户捕获唯一数据,因此不想创建配置文件)。

感谢

虽然我不知道AutoIt的语法,我敢肯定你有报价错误。

双引号必须围绕整个lcd命令,包括它的论点。扩展的命令必须像"lcd /path/to/dir",而不是"lcd" /path/to/dir,因为你现在拥有它。就像您使用open(即"open xyz")一样。

此外,如果您需要在路径中使用空格,则路径本身必须用双引号引起来。由于引用发生在命令行上(与脚本文件相反),双引号具有其含义,因此必须通过将双引号加倍(例如双引号)来避免引号。得到的语法是"lcd ""/path/to/dir"""

所以,与其

... ' "lcd" ' & $Dir 

使用

... ' "lcd ""' & $Dir & '"""' 

参考文献:
https://winscp.net/eng/docs/commandline#syntax
https://winscp.net/eng/docs/scripting#syntax

此外,我相信你并不真的需要常量字符串之间的所有这些串连,只需要:

RunWait(@ComSpec & ' /k winscp.com /command "option batch continue" "option confirm off" "open xyz" "lcd ""' & $Dir & '"""') 
+0

我把$ Dir从“lcd”引用到引号之外,因为我需要用户输入存储在变量中。而在Auto的情况下,如果我根据您的建议将它放在引号中,变量将被读为字符串而不是被读为可变字符 另外,因为我需要使用多个变量,所以我打破了字符串未来的编码。 (一旦我找到了这个问题的解决方案:D – 2014-10-03 14:06:26

+0

您是否尝试过我的建议?双引号与AutoIt无关,它们是WinSCP所需要的.WinSCP不会理解''lcd'/ path/to/dir',它需要''lcd/path/to/dir“'。单引号是AutoIt的语法,而'$ Dir'在我的例子中不在单引号之内 – 2014-10-03 14:31:25

+0

是的,我做了,谢谢!我的问题的一半。我现在可以使用变量'$ Dir',但是我必须像'$ Dir =“C:\”'手动定义它,然后命令成功运行。 但是,如果我将用户输入传递给我的变量,我得到一个错误** **太多的参数为LCD **。 这就是我使用用于捕捉和传递用户输入 '$ locald = GuiCtrlCreateInput( “本地目录”,-1,10,130,20) \t GUICtrlSetPos($风向,145,40) $迪尔= GUICtrlRead($ locald)' 请指教,因为我相信即时通过参数错误 – 2014-10-03 17:44:33