Batch file 当我在批处理文件中运行下面的代码时,它将只执行第一行,而不会关闭命令窗口

Batch file 当我在批处理文件中运行下面的代码时,它将只执行第一行,而不会关闭命令窗口,batch-file,Batch File,最初在命令前没有调用,命令窗口也不会关闭,但在论坛上阅读,这可能会使它工作。现在命令窗口关闭,但它不复制文件,并且文件确实存在。在我将调用放在每个命令前面之前,它只执行第一行,不会关闭命令窗口。不知道下一步该做什么。谢谢 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_0

最初在命令前没有调用,命令窗口也不会关闭,但在论坛上阅读,这可能会使它工作。现在命令窗口关闭,但它不复制文件,并且文件确实存在。在我将调用放在每个命令前面之前,它只执行第一行,不会关闭命令窗口。不知道下一步该做什么。谢谢

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")

您使用的
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
)
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
)
CopyFiles.cmd:

for %k in (1 2 3 4 5 6 7 8) do (
    call copyFiles.cmd %k
)
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
命令的正确方法,如前所述,如果
命令不是答案,则在
前面添加
Call


至于你的程序为什么挂起,我不确定。我怀疑您正在复制的文件可能相当大(和/或驱动器速度特别慢),在继续下一行之前,只需要花费一些时间来完成复制。如果。。。在命令提示符下复制…
命令,并计时完成所需的时间

为什么你要在所有这些
IF
命令前使用
调用
呢?你不能,因为我在这个论坛上搜索,看到了在类似情况下建议使用该调用的地方。@JohnL,我看不出没有调用你的代码就不能工作的任何原因。但是,当我运行它时,我也看不到,它执行第一行,然后命令窗口挂起打开,我必须关闭它。你是对的。文件很大,我很不耐烦。使用Windows资源管理器,我可以看到第一个文件已被复制,但当我检查批处理文件时,它似乎被卡住了。对于我给任何人带来的不便,我深表歉意。