无法将命令行参数传递给批处理文件

时间:2014-09-25 06:03:16

标签: windows batch-file ftp cmd

  

我正在打开与服务器的FTP连接并将文件放在指定位置的批处理文件。

以下是我的 ftpConnection.bat 文件的样子..

open HOST
FTP_USER_NAME
FTP_USER_PASSWD
cd TO_DIR
lcd TO_FILE_LOCATION
put THE_FILE
quit

并且从命令提示符开始,如果我像这样 ftp -i -s:ftpConnection.bat 运行它,它可以正常工作。

我的要求是将HOST,USER_NAME和PASSWORD作为参数传递

所以我尝试使用 %1 %2 and %3 ,但这不适合我。

像这样传递论据

C:\Users\xxx\Desktop>ftp -i -s:ftpConnection.bat "HOST" "USER_NAME" "PASSWORD" 

也尝试过没有引号,但结果相同,显示

  

将文件传输到运行FTP服务器服务的计算机或从中传输文件   (有时称为守护进程)。 Ftp可以交互使用。

     

FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-A] [-x:sendbuffer] [-r:recvbuf   fer] [-b:asyncbuffers] [-w:windowsize] [host]

关注并尝试了一些文档,例如 How to pass multiple parameters in CMD to batch file Batch file command line arguments

  

他们建议使用设置,我尝试如下,但效果相同。

set host=%1
set uname=%2
set passwd=%3
open %1
%2
%3

任何人都可以告诉我我做错了什么或任何指针来实现这一点。

提前致谢。

2 个答案:

答案 0 :(得分:3)

很抱歉,您正在使用带有ftp命令预期和解释的输入和命令的文本文件。这不是Windows批处理文件,不能使用其语法。

要在调用中使用所需数据作为参数,您需要一个批处理文件,该文件将根据传递的参数生成ftp脚本

@echo off
  setlocal enableextensions disabledelayedexpansion

  if "%~3"=="" goto :eof

  set "TO_DIR=......"
  set "TO_FILE_LOCATION=......"
  set "THE_FILE=........"

  > ftpScript (
      echo open %~1
      echo %~2
      echo %~3
      echo cd %TO_DIR%
      echo lcd %TO_FILE_LOCATION%
      echo put %THE_FILE%
      echo quit
  )

  ftp -i -s:ftpScript 

现在,您有一个批处理文件(我们称之为doFTP.cmd),您可以将其称为

doFTP.cmd ftpserver userName pa$$word

命令行中的参数存储在%1%2%3变量中(%~1是第一个参数,如果存在则不带引号)并在要生成的批处理文件(echo命令块被重定向到ftpScript文件)ftp将处理的文本文件。

答案 1 :(得分:0)

根据您的使用情况,就像

set host=%1
set uname=%2
set passwd=%3
open %host%
%username%
%passwd%

你可以使用set变量来封闭两个%var-name%,如上所示 请试一试