【问题标题】:Batch script looping during FTP transferFTP传输期间的批处理脚本循环
【发布时间】:2014-05-08 13:42:36
【问题描述】:

我正在编写一个批处理脚本,该脚本获取转换后的视频文件并将它们通过电子邮件发送给用户。但是,在转换完成并且脚本开始将它们上传到服务器后,批处理脚本将再次启动。此问题导致文件被多次转换和上传,它还会向同一用户发送重复的电子邮件。什么可能导致此脚本重新启动?

注意:当我说“重新开始”或“重新启动”时,我的意思是脚本的一个新实例在另一个完成之前启动。

编辑:此脚本已根据以下建议的格式问题进行了更新,但问题仍然存在。

C:\ffmpeg\bin\ffmpeg.exe -i C:\projects\weatherRecorder\avi\%1.mpg -qscale 0 -y C:\projects\weatherRecorder\avi\%1.mp4
C:\ffmpeg\bin\ffmpeg.exe -i C:\projects\weatherRecorder\avi\%1.mpg -q:v 6 -y C:\projects\weatherRecorder\avi\%1.ogv
C:\ffmpeg\bin\ffmpeg.exe -i C:\projects\weatherRecorder\avi\%1.mpg -q:v 9 -y C:\projects\weatherRecorder\avi\%1.webm
(
echo option batch abort
echo option confirm off
echo open ftp://example.org:example@example/
echo put C:\projects\weatherRecorder\avi\%1.mp4 /domains/example.org/html/wfsb/video/
echo put C:\projects\weatherRecorder\avi\%1.ogv /domains/example.org/html/wfsb/video/
echo put C:\projects\weatherRecorder\avi\%1.webm /domains/example.org/html/wfsb/video/
echo put C:\projects\weatherRecorder\avi\%1.txt /domains/example.org/html/wfsb/video/
echo exit
) > ftpScript%1.txt
C:\winscp.com /script=ftpScript%1.txt
del C:\projects\weatherRecorder\avi\%1.mpg
del C:\projects\weatherRecorder\avi\%1.mp4
del C:\projects\weatherRecorder\avi\%1.ogv
del C:\projects\weatherRecorder\avi\%1.webm
"C:\xampp\php\php.exe" -f send.php %1

脚本在这一行开始一个新的实例:

 C:\winscp.com /script=ftpScript%1.txt

我看过类似的问题,看起来很多都与批处理脚本文件名与脚本中的命令相同。例如“FTP.bat”,当文件中有 FTP 命令时。我不认为这是问题,因为文件名是“ftp_script.bat”。

如果我可以提供任何其他信息来帮助澄清这个问题,请告诉我。

【问题讨论】:

  • 您将录制编号作为 %1 传递,那么您是否尝试一次 FTP 多个流?如果是这样,您的del ftpScript*.txt 可能正在删除另一个传输的控制文件,这可能会扰乱 WINSCP,也许?
  • %1 是录制的时间和日期。 '%1.mpg' 会变成类似:'14-04-17-15-47.mpg'。在创建新的控制文件之前,所有以前的控制文件都会被删除。我不明白为什么 WINCSP 会感到困惑。你能更详细地向我解释一下吗?谢谢!
  • 你用 WINSCP.COM 创建ftp_result.txt 然后覆盖它两次...为什么?
  • 这只是一个想法...您的 WINSCP 可能正忙于使用名为 ftpScript14-04-17-15-47 的控制文件对 14-04-17-15-47.mpg 进行 FTP 传输,然后您启动另一个 FTP 并删除第一个 WINSCP 仍在使用的 ftpScript*。
  • 谢谢马克,这可能是导致这个问题的原因!我没有意识到 WINCSP 命令被包含在控制文件中。 WINCSP 如何两次创建 ftp_result.txt?也许我应该删除 WINCSP 行上的 "> ftp_result.txt"。

标签: php windows batch-file ftp cmd


【解决方案1】:

这实际上不是一个答案,但在评论中很难阅读格式,所以我建议澄清/简化你的脚本......

您可能会发现这更容易:

(
echo option batch abort
echo option confirm off
echo open ftp://example.org:example@example.com/
echo lcd C:\projects\weatherRecorder\avi
echo cd /domains/example.org/html/video
echo put %1.mp4
echo put %1.ogv
echo put %1.webm
echo put %1.txt
echo exit
) > ftpScript%1.txt

代替这个:

del ftpScript*.txt
echo option batch abort> ftpScript%1.txt
echo option confirm off>> ftpScript%1.txt
echo open ftp://example.org:example@example.com/>> ftpScript%1.txt
echo put C:\projects\weatherRecorder\avi\%1.mp4 /domains/example.org/html/video/>> ftpScript%1.txt
echo put C:\projects\weatherRecorder\avi\%1.ogv /domains/example.org/html/video/>> ftpScript%1.txt
echo put C:\projects\weatherRecorder\avi\%1.webm /domains/example.org/html/video/>> ftpScript%1.txt
echo put C:\projects\weatherRecorder\avi\%1.txt /domains/example.org/html/video/>> ftpScript%1.txt
echo exit>> ftpScript%1.txt

【讨论】:

  • 感谢您清理此脚本马克!就这样我明白了,修改后的脚本中括号的目的是什么?感谢您的帮助。
  • 它只是将所有echo 命令的所有输出放在一起并将它们写入文件ftpScript%1.txt。从本质上讲,它使它们成为一个子命令。
  • 马克,这更有意义!谢谢你。今天下午我会测试这个版本,如果解决了问题我记得标记为正确!
  • 你好,马克,不幸的是,即使修改了脚本,循环也会继续。我想知道应用程序本身是否有时间限制。
【解决方案2】:

您是否使用过命令名称作为批处理文件名 - 尝试将其重命名为 testftp.bat 以检查 edit: 我注意到您的批处理文件名,但实际上我看不到重新启动它;但是我不知道 php.exe 在做什么。

c:\ 中有 winscp.bat 吗?

如果这些都不是问题,那么此行将等到 FTP 完成后再继续:

start "" /w /b C:\winscp.com /script=ftpScript%1.txt > ftp_result.txt

【讨论】:

  • 您好 foxidrive,没有任何命令反映批处理脚本的名称。我还删除了将结果写入 ftp_result 的部分。我的 C 目录中也没有 winscp.bat 文件。 PHP.exe 只是运行一个 PHP 脚本,它会向录制视频文件的人发送一封电子邮件,其中包含指向他们的视频文件的链接。我将尝试使用您为 WINSCP 行建议的修订版,但是脚本会等到传输完成后再继续,但是在上传期间它会创建整个批处理脚本的附加实例。
  • 你已经改变了脚本,正如你上面所说的,正如我所概述的:在你向我们展示的内容中没有重新运行脚本。
  • 我想知道这个问题是否是由 WINSCP 本身引起的?或者也许这是托管文件的服务器的问题?我担心这是触发批处理脚本的应用程序的问题,但是,这个问题最近才开始发生。注意:我们以前使用 FTP 命令而不是使用 WINSCP,我们的新服务器由于某种原因不允许这样做。这就是为什么我会认为这是 WINSCP 行的格式问题。即便如此,触发整个批处理文件对我来说似乎很奇怪。
  • 原因在实际代码中。向我们展示经过净化的代码意味着您得到的任何答案都仅限于您提供给我们的代码。
  • 我试图理解你的意思。您说我提供的代码中没有重新运行脚本,这是否意味着您认为问题出在触发批处理脚本的程序中?感谢您花时间帮助我理解。
猜你喜欢
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多