FTP传输过程中的批处理脚本循环


Batch script looping during FTP transfer

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

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

EDIT:这个脚本已经按照下面建议的格式问题进行了更新,但是问题仍然存在。

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命令,则为'FTP.bat'。我不认为这是问题,因为文件名是'ftp_script.bat'。

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

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

您可能会发现这更容易:

(
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

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

您的c:'中是否有winscp.bat ?

如果这些都没有问题,那么这一行将等待FTP完成后再继续:

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