【问题标题】:Using variables in ftp connection by cmd通过cmd在ftp连接中使用变量
【发布时间】: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%。

【问题讨论】:

    标签: windows batch-file cmd ftp server


    【解决方案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
        

        会工作的。

        【讨论】:

          猜你喜欢
          • 2011-05-14
          • 1970-01-01
          • 2012-04-22
          • 2017-12-08
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多