Originalmente no tenía una llamada delante del comando y la ventana de comando no se cerraba, pero lee en el foro dónde podría hacerlo funcionar. Ahora se cierra la ventana de comandos, pero no copia los archivos y los archivos existen. Antes de poner una llamada delante de cada comando, ejecutaría solo la primera línea y no cerraría la ventana de comandos. No estoy seguro de qué probar a continuación. Gracias

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")
0
John L 25 ene. 2016 a las 22:18

2 respuestas

La mejor respuesta

Como ya se dijo, agregar CALL delante de sus comandos IF no es la respuesta.

En cuanto a por qué su programa se cuelga, no estoy seguro. Sospecho que puede ser un archivo bastante grande que está copiando (y / o sus unidades son particularmente lentas), y solo necesita algo de tiempo para completar la copia antes de pasar a la siguiente línea. Puede probar esto ejecutando su comando IF ... COPY ... en un símbolo del sistema y cronometrando cuánto tiempo tarda en completarse.

0
Wes Larson 25 ene. 2016 a las 20:52

Su uso del comando Call es incorrecto. Solo toma un parámetro de ruta de archivo y se usa para llamar otros archivos de comando / lote, o subrutinas / funciones en el mismo archivo de comando:

Syntax
      CALL [drive:][path]filename [parameters]

      CALL :label [parameters]

      CALL internal_cmd

Dado que está haciendo el mismo proceso varias veces, debe usar dos archivos por lotes: uno controla el flujo y llama al otro que hace el proceso:

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
)

Como puede ver, el archivo mainBatch.cmd llama al segundo archivo por lotes, que realiza el procesamiento principal. Esa es la forma correcta de usar el comando Call

0
Rodrigo M 25 ene. 2016 a las 20:10