FTP传输期间的批处理脚本循环

时间:2014-05-08 13:42:36

标签: php windows batch-file ftp cmd

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

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

编辑:由于下面建议的格式问题,此脚本已更新,但问题仍然存在。

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'。

如果我能提供任何其他信息以帮助澄清此问题,请与我们联系。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

winscp.bat中有c:\吗?

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

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