我有一个 .bat 脚本,其中包含与此类似的 ftp 命令(全部合为一体)。请参阅第 5 行:FTP - 解析环境变量 - 在运行时动态创建 FTP 脚本并在 FTP 脚本中使用变量
当我从命令行运行 .bat 时,一切正常。文件(就我而言)从服务器传输到我的计算机。
但是,当我双击运行同一个 .bat 文件时,它不再正确解释 ftp 脚本。
所有其他 .bat 文件如果双击或从命令行调用,似乎都工作正常。这在这里行不通吗?如果行得通,原因何在?
编辑:
问题似乎出在它到达第一个使用变量的 ftp 命令时。
例如,它将正常打开和连接,但我的下一个命令是 get,文件名为变量。它似乎无法读取变量名,只能调用 get。但是,当我从 cmd 行调用该 bat 时,我没有看到此问题……
编辑
问题已修复,请参阅下面的回答。
谢谢。
答案1
我猜测双击 .bat 文件时当前目录设置错误,这就是导致它找不到 FTP 脚本的原因。
尝试添加echo %CD%
到批处理文件并查看在每种情况下打印什么。
答案2
如果不知道脚本为何失败,这将非常困难。
从命令提示符窗口运行和双击之间的主要区别在于工作目录。
您无法在普通批处理文件上更改此设置,但您可以创建该批处理文件的快捷方式并Start in:
在那里更改目录。
答案3
回答:
我的变量是在 for 循环之前声明的,该循环将 ftp 命令保存在临时文件中,然后用值替换变量。因此,此时没有变量可以替换 ftp 脚本中使用的变量。
它只是看起来像是在命令行中工作,因为我第一次调用它时它可能在那里出错了,但如果我在不关闭控制台的情况下再次调用它,变量现在就存储在内存中了。从那时起,它看起来就像一直在控制台中工作一样。
一旦它们被存储在内存中,for 循环就不再重要了前变量。第一次打开后,变量现在存储在内存中。
双击时,每次都会打开第一个会话,并且变量会在它自动关闭后从内存中删除。因此在这种情况下,每次我双击它时,它都会打开和关闭。
打开第一个会话与在同一个控制台中再次调用而不关闭它是这里的主要区别。第一次调用它时,变量将在 ftp 脚本创建之前保存。
如果您可以使其更清楚,请随意编辑它...