【问题标题】:Escape characters in batch scripts批处理脚本中的转义字符
【发布时间】:2010-10-04 11:25:22
【问题描述】:

我有以下脚本可以自动将文件上传到远程服务器。问题是我得到的密码充满了特殊字符,这些字符正在杀死登录过程。

这里是字符的更改版本:

j7~]%&X

使用普通的 FTP 应用程序没有问题。我将密码用引号括起来,还尝试使用^ 来转义百分比和与号。但是,它不起作用。另外,我不知道发送的实际密码是什么。

可能出了什么问题,或者我如何在发送密码之前泄露密码?

:Source = http://www.howtogeek.com/howto/windows/how-to-automate-ftp-uploads-from-the-windows-command-line/

@echo off
echo user myloginname> ftpcmd.dat
echo mypassword>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo put %1>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat myserver
del ftpcmd.dat

解决方案

如下所述,我使用“type”命令查看ftpcmd.dat 中的实际内容。事实证明,通过大量尝试错误并阅读转义字符,您对不同的特殊字符使用不同的转义字符!!!

对于&符号使用插入符号,对于百分比使用百分比。所以,给定我的密码:

j7~]%&X

生成的密码将是:

j7~]%%^&X

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    在您的情况下,您只需在删除文件之前键入文件即可显示密码。

    但最好使用延迟扩展,因为这样特殊字符会失去其“特殊”行为,甚至是插入符号和百分号。

    @echo off
    setlocal EnableDelayedExpansion
    set /p passwd=Enter pwd
    echo user myloginname> ftpcmd.dat
    echo mypassword>> ftpcmd.dat
    echo bin>> ftpcmd.dat
    echo put !passwd! >> ftpcmd.dat
    echo quit>> ftpcmd.dat
    type ftpcmd.dat
    ftp -n -s:ftpcmd.dat myserver
    

    第二个问题是 ftp 命令,其中的字符也需要转义。 也许(就像 Vicky 写的)反斜杠可以工作。 您可以使用 for 循环将其放在每个字符之前

    【讨论】:

    • 我最终在这里使用“type”命令输出 ftpcmd.dat 文件。这有助于我了解发生了什么。谢谢你。
    【解决方案2】:

    仅供参考,字符前缀是用 ^ 完成的。因此,如果您在字符串中使用> 执行echo 但写入文件,它将失败而不会转义。语法是:

    echo ^<html^> >> foo.txt
    

    【讨论】:

      【解决方案3】:

      FTP 密码以纯文本形式发送,因此安装 Wireshark 之类的内容可以让您看到正在发送的内容。

      我希望您需要在特殊字符前加上反斜杠。

      【讨论】:

      • Vicky ... 干杯。我设法使用 jeb 的建议来了解发生了什么,但无论如何该软件看起来很有趣,因此将是一个有用的工具。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多