Windows 下使用ftp批处理脚本

交互命令下FTP

一般状况下, 我们使用FTP 到某台机器上进行文件上传、下载的操作,

在命令方式下,基本上是:

1.ftp  主机名

2.输入用户名

3. 输入密码

4. 切换模式(asc 或者是 bin)

5. 上传或下载(put 或者是 get)

6. 退出(bye  or quit)


如果使用一些FTP 工具的话, 操作起来就更简单了。


ftp 批处理脚本

如果我们要定期的自动做一些FTP的动作的话, 可以写一个批处理档, 放到Windows 的Task 中定期执行。

这种思路的一般解法是:写两个批处理文件, 一个是主批处理,用来调用FTP; 另外一个是ftp 操作的批处理(这个文件的后缀名可以随意)。

这里的实例的两个文件是:main.bat ; ftptmp.bat

main.bat 的内容就很简单:

ftp -n -s:"ftptmp.bat"


ftptmp.bat的内容如下:

open $ftphost
user $username $password
cd $filepath
get $filename
bye
exit
命令中的变量需自行替换。


带参数的脚本

像以上的变量, 可能并不是一开始就决定的, 这部分需要动态的通过变量的方式传递进去。

想一想, Windows 的 .bat 脚本执行的时候,可以在后面直接加上一些参数, 在脚本中通过  %0%, %1%这样的方式获取。

举个例子, 以上执行main.bat 时,如果在命令行输入:

main.bat 111 222 333 

则在main.bat 的脚本文件中

%0%  对应的是 main.bat

%1%  对应的是 111

......

看例子:

@echo off
echo %0%>>main.log
echo %1%>>main.log


ftp -n -s:"ftptmp.bat"

现在的问题是: ftptmp.bat 这个文件中 ftp 的脚本中并不能获取bat 设置的变量。

所以, 想一想解决思路可以是:  使用 main.bat 临时产生ftptmp.bat这个文件(变量替换成传入的值)

文件类似:

@echo off
echo open %1%>>>ftptmp.bat
echo user %2% %3%>>ftptmp.bat
echo cd %4%>>ftptmp.bat
echo get %5%>>ftptmp.bat
echo bye>>ftptmp.bat
echo exit>>ftptmp.bat
ftp -n -s:ftptmp.bat

调用的时候:

main.bat host username password filepath filename



参考


ftp [-v] [-d] [-i] [-n] [-g] [-s:FileName] [-a] [-w:WindowSize] [-A] [Host]

参数:

-v:禁止显示远程服务器响应。

-d:启用调试、显示在客户端和服务器之间传递的所有ftp命令。

-i:多个文件传送时关闭交互提示。

-n:禁止自动登录到初始连接。

-g:禁用文件名组,它允许在本地文件和路径名中使用通配符字符(*和?)。

-s:FileName:指定包含ftp命令的文本文件;当ftp启动后,这些命令将自动运行。该参数中不允许有空格。使用该开关而不是重定向(>)。

-a:在捆绑数据连接时使用任何本地接口。

-w:WindowSize:替代默认大小为4096的传送缓冲区。

-A:匿名登陆。

Host:指定要连接到远程计算机的计算机名或IP地址。如果指定,计算机必须是最后一个参数。



简单批处理内部命令简介
        
            1.echo 命令
            打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
            语法
            echo [{on|off}] [message]
            Sample:@echo off / echo hello world
            在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。

            2.@ 命令
            表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。
            Sample:@echo off
            @echo Now initializing the program,please wait a minite...
            @format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)

            3.goto 命令
            指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
            语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
            Sample:
            if {%1}=={} goto noparms
            if {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)
            @Rem check parameters if null show usage
            :noparms
            echo Usage: monitor.bat ServerIP PortNumber
            goto end
            标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。

            4.Rem 命令
            注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。
            Rem Message
            Sample:@Rem Here is the descr1ption.

            5.Pause 命令
            运行 Pause 命令时,将显示下面的消息:
            Press any key to continue . . .
            Sample:
            @echo off
            :begin
            copy a:*.* d:back
            echo Please put a new disk into driver A
            pause
            goto begin
            在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按我饧 绦 怼?

            6.Call 命令
            从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。
            语法
            call [Drive:][Path] FileName [BatchParameters] [:label [arguments]
            参数
            [Drive:}[Path] FileName
            指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。

            7.start 命令
            调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
            入侵常用参数:
            MIN 开始时窗口最小化
            SEPARATE 在分开的空间内开始 16 位 Windows 程序
            HIGH 在 HIGH 优先级类别开始应用程序
            REALTIME 在 REALTIME 优先级类别开始应用程序
            WAIT 启动应用程序并等候它结束
            parameters 这些为传送到命令/程序的参数
            执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。

ftp命令详解  

1 !
     Escape to the shell.
     从 ftp 子系统临时退出到命令提示符下。
     要返回到 ftp 子系统,请在命令提示符下键入 exit。
     语法:!
2 append  
     Append to a file
     使用当前文件类型设置将本地文件附加到远程计算机上的文件。
     语法:append LocalFile [RemoteFile]
3 ascii
     Set ascii transfer type.
     设定以ASCII方式传送文件(缺省值)
     语法:ascii
4 bell
     Beep when command completed
     每个文件传输命令执行完后,将会切换到一个可听见的声音。
     语法:bell
5 binary
     Set binary transfer type
     设定以二进制方式传送文件。
     语法:binary
6 bye
     Terminate ftp session and exit.
     终止主机FTP进程,并退出。
     语法:bye
7 cd
     Change remote working directory.
     更改远程计算机上的工作目录。
     语法:cd RemoteDirectory
8 close
     Terminate ftp session
     结束与远程服务器进行的 FTP 会话,并停留在 ftp> 提示符下。
     语法:close
9 delete
     Delete remote file.
     删除远程计算机上的文件。
     语法:delete Remotefile
10 dir
     List contents of remote directory
     显示远程计算机上的目录文件和子目录列表。
     语法:dir [remote-directory] [local-file]
11 disconnect
     Terminate ftp session.
     从远程计算机断开连接,同时保留 ftp> 提示符。
     语法:disconnect
12 get
     Receive file.
     使用当前文件传送类型将远程文件复制到本地计算机。
     语法:get [remote-file] [local-file]
13 glob
     Toggle metacharacter expansion of local file names.
     切换本地文件名的通配符扩展。
     语法:glob
14 hash
     Toggle printing `#‘ for each buffer transferred.
     切换已传输的每个数据块的数字签名 (#) 打印。
     语法:hash
15 help
     Print local help information.
     显示 ftp 子命令说明。
     语法:help [Command]
16 lcd
     Change local working directory.
     更改本地计算机上的工作目录。默认情况下,工作目录是启动ftp的目录。
     语法:lcd [directory]
17 literal
     Send arbitrary ftp command.
     将参数逐字发送到远程 FTP 服务器。单一 FTP 答复代码返回。
     语法:literal Argument [ ...]
18 ls
     List contents of remote directory.
     在远程目录上显示文件简短目录和子目录。
     语法:ls [RemoteDirectory] [LocalFile]
19 mdelete
     Delete multiple files.
     删除远程计算机上的多个文件。
     语法:mdelete RemoteFiles [ ...]
20 mdir
     List contents of multiple remote directories.
     显示远程目录中的文件和子目录列表。
     语法:mdir RemoteFiles [ ...] LocalFile
21 mget
     Get multiple files.
     使用当前文件传送类型将远程多个文件复制到本地计算机。
     语法:mget RemoteFiles [ ...]
22 mkdir
     Get multiple files
     创建远程计算机上的目录。
     语法:mkdir directory
23 mls
     List contents of multiple remote directories.
     在远程目录上显示文件简短目录和子目录。
     语法:mls RemoteFiles [ ...]LocalFile
24 mput
     Send multiple files.
     使用当前多个文件传送类型将本地文件复制到远程计算机上。
     语法:mput LocalFiles [ ...]
25 open
     Connect to remote tftp.
     与指定的 FTP 服务器连接。
     语法:open Computer [Port]
26 prompt
     Force interactive prompting on multiple commands.
     在 prompt 的开模式和关模式之间切换。
     语法:prompt
27 put
     Send one file.
     使用当前一个文件传送类型将本地文件复制到远程计算机上。
     语法:put LocalFile [RemoteFile]
28 pwd
     Print working directory on remote machine.
     打印远程计算机上的当前目录。
     语法:pwd
29 quit
     Terminate ftp session and exit.
     结束与远程计算机的 FTP 会话并退出 ftp 到命令提示符下。
     语法:quit
30 quote
     Send arbitrary ftp command.
     将参数逐字发送到远程 FTP 服务器。单一 FTP 答复代码返回。
     语法:quote Argument [ ...]
31 recv
     Receive file.
     使用当前文件传送类型将远程文件复制到本地计算机。
     语法:recv RemoteFile [LocalFile]
32 remotehelp
     Get help from remote server.
     显示远程命令的帮助。
     语法:remotehelp [Command]
33 rename
     Rename file.
     重命名远程文件。
     语法:rename FileName NewFileName
34 rmdir
     Remove directory on the remote machine.
     删除远程目录。
     语法:mdir Directory
35 send
     Send one file.
     使用当前文件传送类型将本地文件复制到远程计算机上。
     语法:send LocalFile [RemoteFile]
36 status
     Show current status.
     显示 FTP 连接的当前状态。
     语法:status
37 trace
     Toggle packet tracing.
     切换数据包跟踪。
     语法:trace
38 type
     Set file transfer type.
     设置或显示文件传送类型。
     语法:type [TypeName]
39 user
     Send new user information
     指定远程计算机的用户。
     语法:user UserName [Password] [Account]
40 verbose
     Toggle verbose mode.
     切换 verbose 模式。
     语法:verbose

你可能感兴趣的:(450-操作系统及相关)