我正在寻找可以使用FTP获取文本文件的批处理文件,并且可以延迟10秒运行。
这是我的代码:
CREATE TABLE technical (
id INT NOT NULL AUTO_INCREMENT,
name varchar(255),
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE problem (
id INT,
name varchar(255),
technical_id_in INT,
technical_id_waiting INT,
technical_id_out INT,
INDEX (technical_id_in,technical_id_waiting,technical_id_out),
FOREIGN KEY (technical_id_in) REFERENCES technical(id) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (technical_id_waiting) REFERENCES technical(id) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (technical_id_out) REFERENCES technical(id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=INNODB;
INSERT INTO `technical` (`id`, `name`) VALUES ('1', 'victor'), ('2', 'eduardo'), ('3', 'jose');
INSERT INTO `problem` (`id`, `name`, `technical_id_in`, `technical_id_waiting`, `technical_id_out`) VALUES ('1', 'Problem 1', '1', '2', '1'), ('2', 'Problem 2', '1', '1', '1');
我一直收到错误
:loop
ftp -i -s:"%~f0"&GOTO:EOF
open Server_IPADDRESS
userName
Password
get test.txt
close
TIMEOUT 10
goto loop
我想要的是退出ftp> TIMEOUT 10
Invalid command.
ftp> goto loop
Invalid command.
并恢复正常ftp
,但我无法让它发挥作用。
答案 0 :(得分:2)
确保您了解-s:"%~f0"
的作用。
它告诉ftp.exe
自己运行批处理文件,就好像它是FTP脚本一样。
当ftp.exe
运行批处理文件时,它:
:loop
和ftp.exe
行提供了两个“无效命令”错误。TIMEOUT 10
和goto loop
命令提供了两个“无效命令”错误。另一方面,批处理文件解释器(cmd.exe
)看到GOTO:EOF
,它有效地告诉它停止解释批处理文件。因此,TIMEOUT 10
和goto loop
永远不会被执行。
你需要:
GOTO:EOF
更改为在TIMEOUT 10
命令之前跳转; ftp.exe
在close
使用bye
命令后停止,以免您使用后一组“无效命令”错误。:loop
ftp -i -s:"%~f0"&GOTO:afterftp
open Server_IPADDRESS
userName
Password
get test.txt
close
bye
:afterftp
TIMEOUT 10
goto loop
虽然更强大的方法是分离FTP脚本和批处理文件:
FTP脚本(ftp.txt
):
open Server_IPADDRESS
userName
Password
get test.txt
close
批处理文件:
:loop
ftp -i -s:ftp.txt
TIMEOUT 10
goto loop
或者使用临时文件作为FTP脚本:
:loop
echo open Server_IPADDRESS> ftp.txt
echo userName>> ftp.txt
echo Password>> ftp.txt
echo get test.txt>> ftp.txt
echo close>> ftp.txt
ftp -i -s:ftp.txt
del ftp.txt
TIMEOUT 10
goto loop
(实际上,无需在每个循环中重新创建ftp.txt
)