转义批处理脚本中的字符

时间:2010-10-04 11:25:23

标签: batch-file

我有以下脚本来自动将文件上传到远程服务器。问题是我给出的密码中充满了特殊字符,这些字符会导致登录过程终止。

以下是角色的更改版本:

  

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

3 个答案:

答案 0 :(得分:4)

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

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

@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-loop

将它放在每个单个字符之前

答案 1 :(得分:1)

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

我希望您需要使用反斜杠为特殊字符添加前缀。

答案 2 :(得分:1)

仅供参考,字符前缀用^完成。因此,如果您在字符串中使用echo进行>但是编写文件,则会在没有转义的情况下失败。语法如下:

echo ^<html^> >> foo.txt