通过cmd在ftp连接中使用变量

Posted

技术标签:

【中文标题】通过cmd在ftp连接中使用变量【英文标题】:Using variables in ftp connection by cmd 【发布时间】:2016-11-04 23:39:52 【问题描述】:

如何在 ftp 中使用变量? 这就是我所做的: 文件 a.bat:

set file=test ftp -s:b.txt IP

文件 b.txt

user password get %file% quit

并且日志显示没有任何 %file%。

【问题讨论】:

【参考方案1】:

这是一个上传多个文件的例子:

@echo off
Title Multiple file Upload by Hackoo on adrive
Color 0A
::****** Settings for FTP ************
Set FTPSERVER=ftp.adrive.com
Set USER=Your Login
Set Password=Your Password
Set LocalFolder=C:\Hackoo
Set RemoteFolder=/backupFolder
::************************************
::--- FTP commands below here ---
> ft.do echo Open %FTPSERVER%
>> ft.do echo %USER%
>> ft.do echo %Password%
>> ft.do echo prompt n
>> ft.do echo bin
>> ft.do echo lcd %LocalFolder%
>> ft.do echo MkDir %RemoteFolder%
>> ft.do echo cd %RemoteFolder%
>> ft.do echo mput "*.*"
>> ft.do echo disconnect
>> ft.do echo bye
::************************************
ftp -s:ft.do
del ft.do
Pause

这是一个批处理示例,仅用于测试,它可以仅列出位于 像 ftp.microsoft.com 这样的公共 ftp 服务器 上的文件夹中的文件,以便创建一个 list.txt 文件来下载它之后,请尝试并告诉我们结果。

@echo off
mode con cols=85 lines=22 & Color A
::***********************************
Set FTPSERVER=ftp.microsoft.com
Title Lister les fichiers et les dossiers sur un serveur FTP (%FTPSERVER%) by Hackoo
Set USER=anonymous
Set Password=anonymous@anonymous.com
Set DossierFTP=/bussys/winsock/winsock2/
Set DownloadFolder=winsock2
::*******************************************************
Goto Lister
:Lister
> ft.do echo Open %FTPSERVER%
>> ft.do echo %USER%
>> ft.do echo %Password%
>> ft.do echo prompt n
>> ft.do echo bin
>> ft.do echo cd %DossierFTP%
>> ft.do echo ls -h TLIST.txt
>> ft.do echo bye
ftp -s:ft.do
del ft.do
CLS
Color 9B
echo Download la liste
pause
Goto Download
::*********************************************************
:Download
> ft.do echo Open %FTPSERVER%
>> ft.do echo %USER%
>> ft.do echo %Password%
>> ft.do echo prompt n
>> ft.do echo bin
>> ft.do echo cd %DossierFTP%
for /F %%f in (TLIST.txt) do ( >> ft.do echo get %%f) 
>> ft.do echo bye
ftp -s:ft.do
del ft.do
CLS
Color 9A
pause
echo Deplacer la liste
Goto Deplacer
::*********************************************************
:Deplacer
Set Source=%~dp0
Set Destination=%Source%%DownloadFolder%
if not exist %DownloadFolder% MD %DownloadFolder%
for /F %%f in (TLIST.txt) do (move "%Source%%%f" "%Destination%")
pause

【讨论】:

【参考方案2】:

ftp 不理解 Windows 环境变量。每次都必须像这样生成脚本文件:

set file=test
set ftpscript=%TEMP%\ftp.txt
echo user> %ftpscript%
echo password>> %ftpscript%
echo get %file%>> %ftpscript%
echo quit>> %ftpscript%
ftp -s:%ftpscript% IP    

这里我在 temp 目录中定义了一个临时脚本,所以它不会污染当前目录。

【讨论】:

【参考方案3】:

%-artifact 在 BAT 文件中不起作用的原因是该令牌从未被看到和替换。就像在 UNIX shell 脚本中一样,在收集和标记这些行时执行 $-substitutions。由于包含 %file% 的行被输入到 FTP,它被 FTP 收集和解析,而不是由“DOS”shell。

在 UNIX 中,您可以通过 FTP 传送指令来解决此问题。也就是说,虽然这个(其中 $1 是命令行上提供的文件名参数):

ftp << FTP_CMDS  
user joe  
pass joesPassword  
get $1  
quit  
FTP_CMDS

行不通,这个:

(echo user joe;  
&nbsp;echo pass joesPassword;  
&nbsp;echo get $1;  
&nbsp;echo quit ) | ftp

会工作的。

【讨论】:

以上是关于通过cmd在ftp连接中使用变量的主要内容,如果未能解决你的问题,请参考以下文章

cmd远程拷贝文件

cmd ftp 命令的使用

使用CMD或Powershell连接操作ftp服务器

cmd下无法连接Linux下的FTP服务器的解决方案

被动 FTP 连接不能通过 PHP 工作

为啥我在尝试通过 Matlab ftp 访问 Box 时收到“连接被拒绝”?