批处理文件 If 命令

批处理文件 If 命令

我第一次尝试创建批处理文件。这将下载一个每周使用新 ID 更新一次的文件。这是我迄今为止创建的批处理文件 -

@echo off
echo open SERVER> temp.txt
echo USERNAME>> temp.txt
echo PWD>> temp.txt
echo cd />> temp.txt
echo cd Events/_PPV_Barker>> temp.txt
echo binary>> temp.txt
echo get Barker*_480i.ts>> temp.txt 
ftp -s:temp.txt
del temp.txt

我知道每次在服务器上上传新文件时,文件名的开头都是Barker,结尾都是480i.ts。我尝试了如上所示的 * ,但是没有用。如何使用 if 命令每次都获取具有唯一 ID 的文件?或者除了 if 命令之外还有其他方法吗?

任何帮助将不胜感激。

谢谢

凯沙夫

答案1

如果我理解正确的话,每次访问服务器时都会出现一个新文件,但您不知道其名称的详细信息。我不知道的是,文件是否在您下载后被删除,或者您的文件数量是否不断增加,而您必须选择最新的文件。

在最简单的情况下,只有一个文件,这里您的解决方案几乎是正确的:需要进行一个简单的更改,将其替换getmget,此时通配符*将起作用: -

echo mget Barker*_480i.ts>> temp.txt

如果有许多文件与此文件掩码匹配,则每次访问时您都会下载越来越多的文件。一个快速而粗略的解决方法是将文件保留在当前目录中并使其变为只读:您会遇到很多错误,但新文件将会下载,并且您无需传输之前获得的文件的开销。

如果您对远程目录具有完全访问权限,那么您可以删除、移动或重命名远程下载的文件,这样您每次就只有一个与文件掩码匹配的文件。

如果您无法执行任何这些操作,那么您将需要两次ftp调用:第一次将从远程获取目录列表,然后将其与之前的远程列表进行比较,以便您可以识别新文件并构建第二次ftp调用来检索它。执行此操作的批处理文件并不容易编写,但这是可能的 - 我在处理 WebCam 文件时会这样做。

答案2

如果您愿意将密码和用户名放在脚本中(以纯文本形式!),那么您不应该介意在命令行上使用它们。

如果你在下载旧文件后保留其本地副本,并且不更改它们或它们的时间戳,则可以使用以下方法消除整个批处理文件的想法Windows 版 wget,并包含--timestamping选项。这将比较本地文件和远程文件的大小和时间戳,只有当其中一个不同或本地文件不存在时才下载远程文件。作为额外的好处,如果您错过了之前的更新,它将下载所有新文件,而不仅仅是最新的文件。

你的命令行看起来会像这样:

`wget --ftp-user=<user> --ftp-password=<password> --timestamping ftp://example.com/Events/_PPV_Barker/Barker*_480i.ts`

当然,这假设您具有安装 wget 的适当权限,并且您在本地保留了之前的副本。

答案3

尝试使用:

mget

命令。我查了一下,它说获取多个文件。

答案4

其他计划/方式

使用ftp并不安全。ftp
的安全版本名为ftpsftp 安全ftp。如果可以的话, 尽量使用它来代替。

编写自己的脚本始终是很好的练习,但最好使用为此目的创建的工具(如果有的话)。作为更舒适的替代方案,您可以使用wget(见下文)不需要远程安装任何其他服务器。

由于您可以访问远程计算机(如果已安装),因此您可以使用rsync也一样。
如果失败,请尝试使用scp -p,或sftp利用 ssh-key [4]

如果您要坚持使用ftp,请使用mget盲目复制目录中所有文件的选项,但使用命令提前将文件传输模式设置为二进制binary


获得

wget - 非交互式网络下载器 [12]。 您可以使用:

wget -S -N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts" 

该选项-N是保留时间戳并仅下载比本地文件更新的文件。可能需要引用以避免 Linux 下的 shell 扩展。 它在 Windows 下也可以工作(当然,使用 Windows 版本的程序)。
"


更加完整的命令行在你的情况下(只有一行)应该是:

wget -user=USERNAME -password=PASSWORD 
     -N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts" 

当然,最好避免将密码写在命令行或者在脚本中……您可以简单地使用自我解释选项--ask-password

在 Linux 下,更好的解决方案是将所需信息放在名为 的文件中.wgetrc。在 Windows 文档中应该很容易找到等效名称

$ cat ~/.wgetrc
ftp_user=UsernameOnTheRemoteFTP
ftp_password=PasswordOnTheRemoteFTP
http_user=UsernameOnTheRemoteHTTP
http_password=PasswordOnTheRemoteHTTP

您可以从wget --help或 中阅读man wget

-N,--时间戳 不要重新检索文件,除非比本地文件更新
-S,--服务器响应 打印服务器响应。

--user=用户
--password=密码
指定 FTP 和 HTTP 文件检索的用户名 user 和密码 password。可以使用 --ftp-user 和 --ftp-password 选项(对于 FTP 连接)以及 --http-user 和 --http-password 选项(对于 HTTP 连接)覆盖这些参数。


相关内容