Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 通过cmd在ftp连接中使用变量_Windows_Batch File_Cmd_Ftp_Server - Fatal编程技术网

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

Windows 通过cmd在ftp连接中使用变量,windows,batch-file,cmd,ftp,server,Windows,Batch File,Cmd,Ftp,Server,如何在ftp中使用变量? 这就是我所做的: 文件a.bat: set file=test ftp-s:b.txt IP 文件b.txt 用户 密码 获取%file% 退出 日志显示没有任何%file%。ftp不理解Windows环境变量。每次都必须生成脚本文件,如下所示: set file=test set ftpscript=%TEMP%\ftp.txt echo user> %ftpscript% echo password>> %ftpscript% echo get %

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

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

文件b.txt

用户
密码
获取%file%
退出


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

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    

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

这是一个上载多个文件的示例:

@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服务器(如ftp.microsoft.com上的文件夹中的文件,以便创建一个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

工件在BAT文件中不起作用的原因是该令牌从未被看到和替换。正如在UNIX shell脚本中一样,当收集这些行并对其进行标记时,将执行$替换。因为包含%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