当我在批处理文件中运行下面的代码时,它只会执行第一行并且不会关闭命令窗口
Posted
技术标签:
【中文标题】当我在批处理文件中运行下面的代码时,它只会执行第一行并且不会关闭命令窗口【英文标题】:When i run the code below in a batch file, it will only execute the first line and does not close the command window 【发布时间】:2016-05-02 05:33:58 【问题描述】:原来在命令前面没有调用,命令窗口也不会关闭,但是在论坛上阅读可能会使其工作。现在命令窗口关闭,但它不会复制文件并且文件确实存在。在我将 call 放在每个命令前面之前,它只会执行第一行并且不会关闭命令窗口。不知道接下来要尝试什么。谢谢
call if exist "e:\DiDiver\models\all_gl_post_sum.mdl" (copy /y "e:\DiDiver\models\all_gl_post_sum.mdl" "e:\DiDiver\models\all_gl_post_sum_0ld.mdl")
call if exist "e:\DiDiver\models\all_gl_post_sum.md0" (copy /y "e:\DiDiver\models\all_gl_post_sum.md0" "e:\DiDiver\models\all_gl_post_sum_0ld.md0")
call if exist "e:\DiDiver\models\all_gl_post_sum.md1" (copy /y "e:\DiDiver\models\all_gl_post_sum.md1" "e:\DiDiver\models\all_gl_post_sum_0ld.md1")
call if exist "e:\DiDiver\models\all_gl_post_sum.md2" (copy /y "e:\DiDiver\models\all_gl_post_sum.md2" "e:\DiDiver\models\all_gl_post_sum_0ld.md2")
call if exist "e:\DiDiver\models\all_gl_post_sum.md3" (copy /y "e:\DiDiver\models\all_gl_post_sum.md3" "e:\DiDiver\models\all_gl_post_sum_0ld.md3")
call if exist "e:\DiDiver\models\all_gl_post_sum.md4" (copy /y "e:\DiDiver\models\all_gl_post_sum.md4" "e:\DiDiver\models\all_gl_post_sum_0ld.md4")
call if exist "e:\DiDiver\models\all_gl_post_sum.md5" (copy /y "e:\DiDiver\models\all_gl_post_sum.md5" "e:\DiDiver\models\all_gl_post_sum_0ld.md5")
call if exist "e:\DiDiver\models\all_gl_post_sum.md6" (copy /y "e:\DiDiver\models\all_gl_post_sum.md6" "e:\DiDiver\models\all_gl_post_sum_0ld.md6")
call if exist "e:\DiDiver\models\all_gl_post_sum.md7" (copy /y "e:\DiDiver\models\all_gl_post_sum.md7" "e:\DiDiver\models\all_gl_post_sum_0ld.md7")
call if exist "e:\DiDiver\models\all_gl_post_sum.md8" (copy /y "e:\DiDiver\models\all_gl_post_sum.md8" "e:\DiDiver\models\all_gl_post_sum_0ld.md8")
【问题讨论】:
你为什么在所有IF
命令前面使用CALL
?
你不能CALL IF
因为我在这个论坛上搜索并看到在类似情况下推荐的地方。
@JohnL,我看不出你的代码没有 CALL 就无法工作的任何原因。
我也没有,但是当我运行它时,它会执行第一行,然后命令窗口挂起,我必须关闭它。
【参考方案1】:
如前所述,在您的 IF
命令前面添加 CALL
不是答案。
至于您的程序为何挂起,我不确定。我怀疑它可能是您正在复制的一个相当大的文件(和/或您的驱动器特别慢),并且在继续下一行之前只需要一些时间来完成复制。您可以通过在命令提示符下运行 IF ... COPY ...
命令并计算完成所需的时间来测试这一点。
【讨论】:
你是对的。文件很大,我很不耐烦。使用 Windows 资源管理器,我可以看到第一个文件已被复制,但是当我检查批处理文件时,它看起来像是被卡住了。很抱歉给任何人造成不便。【参考方案2】:您对Call
命令的使用不正确。它只接受一个文件路径参数,用于调用其他命令/批处理文件,或同一命令文件中的子程序/函数:
Syntax
CALL [drive:][path]filename [parameters]
CALL :label [parameters]
CALL internal_cmd
由于您多次执行相同的过程,您应该使用两个批处理文件:一个控制流程,并调用另一个执行该过程的文件:
MainBatch.cmd:
for %k in (1 2 3 4 5 6 7 8) do (
call copyFiles.cmd %k
)
CopyFiles.cmd:
set rootPath=e:\DiDiver\models\all_gl_post_sum
if exist "%rootPath%.md%1" (
copy /y "%rootPath%.md%1" "%rootPath%_0ld.md%1"
echo Copied %rootPath%.md%1
)
如您所见,mainBatch.cmd 文件调用了第二个批处理文件,该文件执行主要处理。这才是使用Call
命令的正确方法
【讨论】:
以上是关于当我在批处理文件中运行下面的代码时,它只会执行第一行并且不会关闭命令窗口的主要内容,如果未能解决你的问题,请参考以下文章
当我运行下面的代码时,我正在获取句柄无效,它需要一个字符串并将其传递给远程批处理文件
在 MouseDown 事件处理程序中检测 Ctrl+Left(鼠标按钮)