【问题标题】:How to pass a user input in AutoIt Script to WinSCP?如何将 AutoIt 脚本中的用户输入传递给 WinSCP?
【发布时间】:2017-03-01 16:02:39
【问题描述】:

我正在尝试使用 AutoIt 和 WinSCP 构建一个 FTP 传输脚本

我正在使用 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 winscp


    【解决方案1】:

    虽然我不知道 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 & '"""')
    

    【讨论】:

    • 我从“lcd”中获取了 $Dir 外部引号,因为我需要存储在变量中的用户输入。如果是 Auto 它,如果我按照您的建议将其括在引号内,则该变量将被读取为字符串而不是被读取为变量此外,由于我需要使用多个变量,因此我已经分解了字符串以供将来编码. (一旦我找到解决这个问题的方法:D
    • 你有没有尝试过我的建议?双引号与 AutoIt 无关,WinSCP 需要它们。 WinSCP 不会理解"lcd" /path/to/dir,它需要"lcd /path/to/dir"。单引号是 AutoIt 语法。在我的示例中,$Dir 在单引号之外。
    • 是的,我做到了,谢谢!它解决了我一半的问题。我现在可以使用变量$Dir,但是我必须像$Dir="C:\" 一样手动定义它,然后命令才能成功运行。但是,如果我将用户输入传递给我的变量,我会收到一个错误,因为 lcd 的参数太多。这是我用来捕获和传递用户输入$locald = GuiCtrlCreateInput("Local Dir", -1, 10, 130, 20) GUICtrlSetPos($Dir,145,40) $Dir=GUICtrlRead($locald) 请告知,因为我相信我以某种方式传递了错误的参数
    • 他解决了你最初的问题。应该发布新的。无论如何,我不认为没有引号可以使用路径。路径中的空格将是问题所在。尝试将路径也放在双引号或单引号中。
    • 谢谢大家,其余的都搞定了。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多