【问题标题】:How to return to execution of cmd command after ftp command "bye"?ftp命令“再见”后如何返回执行cmd命令?
【发布时间】:2012-09-17 15:52:51
【问题描述】:

我有 .bat 文件。好像是下一个

....many commands1
ftp -i -s:copy.txt
...many commands2

copy.txt 包含下一个命令

open ...
login
password
get file
bye

当我执行我的 .bat 文件时,它接下来会起作用

many commands1
ftp commands

但是许多命令2仍然没有执行。

【问题讨论】:

  • 应该可以,但是“许多命令2”当然会在 ftp 完成后执行。你确定它到达“再见”了吗?
  • 是的 :) 我明白了:ftp> 再见 221 再见。
  • 这应该可以。如果您打开回显(即不使用“回声关闭”),您会在“ftp> bye 221...”之后看到什么?
  • 这意味着您的 FTP 脚本执行得很好,因此您需要查看脚本中的下一行并找出该脚本无法运行的原因。

标签: windows ftp cmd


【解决方案1】:

听起来就像您的一个command2 命令可能正在调用(启动)一个批处理文件而不使用CALL 命令。 (底部有两个流程图,说明使用和不使用CALL的后果。)见**使用和不使用CALL的后果。


如果我最初的预感不正确,您需要开始采取措施来调试您的批处理文件。

注释掉任何@ECHO OFF 语句并将一些PAUSE 甚至ECHO 语句放入您的批处理文件中。这将帮助您找到错误。另外,请记住,如果您希望代码执行批处理文件,则需要使用CALL 命令,然后在完成执行CALLed 批处理文件后继续执行CALLing 批处理文件。另外,请注意,如果您 CALL 任何包含 ECHO OFF 语句的批处理文件,即使在控制权返回到 CALLing 文件后,ECHO OFF 仍将继续执行。例如:

:: For debugging porpuses we leave `ECHO` in it's default `ON` state
REM @echo off

:: Execute your leading commands:
commands1

:: If you prefer, because you know that your problem comes after this point;
:: You can, if you want, leave the leading `ECHO OFF` command alone, and
:: instead, put an `ECHO ON` statement here:
echo on

ftp -i -s:copy.txt
ECHO Back from FTPing...
pause

:: Calling command2.1.exe
command2.1.exe
echo Back from command2.1.exe
pause

:: Calling command2.2.bat
CALL command2.2.bat

:: Since Command2.2.bat contains an ECHO OFF statement
:: we'll turn `ECHO` back on again for debugging purposes.
ECHO ON

echo Back from command2.2.bat
pause

使用和不使用CALL的后果。

假设这两个批处理文件:

RUN.BAT

@ECHO OFF
ECHO Starting: RUN.BAT
(Misc commands)

:: 'Calling' SECOND.BAT without useing `CALL`
SECOND.BATCH

:: Back from SECOND.BAT
ECHO Back from second.bat

SECOND.BAT

@echo off
ECHO Running: SECOND.BAT

没有CALL 语句的执行流程将像这样移动:

C:\> RUN.BAT<kbd>ENTER</kbd>
      |
     \|/
      v
@echo off
echo Running
(misc commands)
      |
     \|/
      v
SECOND.BAT   ---->   @echo off
                     echo Running Seond.bat
                     (misc commands)
                      |
                     \|/
                      v
                     END

但是如果你把RUN.BAT文件中的SECOND.BAT这一行改成CALL SECOND.BAT,执行的流程是这样的:

C:\> RUN.BAT<kbd>ENTER</kbd>
      |
     \|/
      v
@echo off
echo Running
(misc commands)
      |
     \|/
      v
SECOND.BAT   ---->   @echo off
                     echo Running Seond.bat
                     (misc commands)
                            |
                           \|/
                            v
:: Back from SECOND.BAT  <--+
      |
     \|/
      v
ECHO Back from second.bat
      |
     \|/
      v
     END

【讨论】:

  • @AnsgarWiechers - 这是常见的做法。习惯它。我注意到您对我关于同一问题的回答的编辑被拒绝了。那是一个提示。
  • @JamesK 不好的做法是不好的,不管它有多普遍。我坚持:不要滥用标签作为 cmets。
  • @AnsgarWiechers - 那很好,我不为你写代码。
  • @AnsgarWiechers - 请注意,您尝试的编辑不仅被社区拒绝,而且您的 -1 评论也已被删除为“离题”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 2020-05-17
  • 2011-07-24
  • 2016-06-17
相关资源
最近更新 更多