¿Cómo encadenar lotes correctamente?


0

Estoy tratando de agrupar una cadena de lotes, pero algo impide que mi segundo lote se ejecute porque trae cosas del primer lote (supongo)

Esta es mi estructura de carpetas:

%~dp0..\× H\
          |______ [00]\
          |         |_________________ 123.jpg
          |                            # hard.cmd
          |
          |
          |______ [00] - cópy\ 
                    |_________________ 345.jpg
                                       # hard.cmd

y empiezo "%~dp0..\× H\[00]\# hard.cmd"donde el contenido de mi # hard.cmdes:

TITLE "R"
CHCP 1250 > NUL 2>&1
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
FOR /F %%a IN ('ECHO PROMPT $H ^| CMD') DO SET BS=%%a
SET "CC=- cópy"
SET "NAME=0"

:IN
   IF NOT EXIST "SOUR CE.png" ( GOTO :CHECK )
   GOTO :START

:START
   IF EXIST "SOUR CE.jpg" IF EXIST "SOUR CE.png" ( GOTO :ASK )

:ASK
   ECHO      RESET JOB ?     y / n
   SET /P "ANSWER=X%BS%                  "
   IF '%ANSWER%' == ''      GOTO :START
   IF '%ANSWER%' == 'n'     GOTO :NO
   IF '%ANSWER%' == 'y'     GOTO :YES

:NO 
   DEL /Q /A /F "SOUR CE.jpg" "%NAME%.jpg"
   GOTO :CHECK

:YES
   DEL /Q /A /F "%NAME%.jpg"
   GOTO :CHECK

:CHECK
   IF EXIST "*.jpg" IF EXIST "*.png" ( GOTO :ERROR )
   IF EXIST "%NAME%.jpg"             ( GOTO :ERROR )
   GOTO :CONTINUE

:CONTINUE
   IF EXIST "*.jpg" ( IF NOT EXIST "SOUR CE.jpg" ( REN "*.jpg" "SOUR CE.jpg" ) )
   IF EXIST "SOUR CE.jpg" ( app.exe -i "SOUR CE.jpg" -o "%NAME%.jpg"
                           GOTO :NEXT )
   GOTO :NEXT

:ERROR
   ECHO this is error
   PAUSE > NUL
   GOTO :NEXT

:NEXT
   IF EXIST   "%~dp0..\[00] %CC%\"     (
   CALL       "%~dp0..\[00] %CC%\# hard.cmd"
   IF EXIST   "%~dp0..\[00] %CC%"  ( REN "%~dp0..\[00] %CC%"  "[02]" ) )
   ECHO DONE

tenga en cuenta que el contenido de ambos lotes (# hard.cmd) es el mismo

si ejecuto estos lotes por separado, se ejecutan como deberían, sin embargo, si trato de encadenarlos como se demostró anteriormente, aparece la etiqueta ERROR del segundo lote, incluso si el segundo lote / carpeta no viola el conjunto de reglas. y como resultado, el segundo lote no se ejecutará como debería (como el primero)

aparte de LLAMAR intenté incluso COMENZAR , pero ninguno de mis intentos funcionó. Estas son las cosas que ya probé:

CALL                      "%~dp0..\[00] %CC%\# hard.cmd"
START CALL                "%~dp0..\[00] %CC%\# hard.cmd"
START "" CALL             "%~dp0..\[00] %CC%\# hard.cmd"
START "" CMD /C           "%~dp0..\[00] %CC%\# hard.cmd"
START "" CMD /K           "%~dp0..\[00] %CC%\# hard.cmd"
START "" /WAIT  /B        "%~dp0..\[00] %CC%\# hard.cmd"
START "" /WAIT /B       /D"%~dp0..\[00] %CC%" "# hard.cmd"
START "" /WAIT /B CALL    "%~dp0..\[00] %CC%\# hard.cmd"

y algunas combinaciones más ... ¿dónde cometí un error? todo lo que quiero es ejecutar el segundo lote por separado después de que termine el primero. preferible en la misma ventana (pero si eso no es posible, entonces el primer lote / ventana abrirá el segundo lote / ventana y el primero se cerrará a la derecha después de que el segundo comience a ejecutarse)

tal como lo veo, el segundo lote trae el conjunto de reglas del primer lote, porque cuando el primer lote termina, en la carpeta [00] hay un archivo "0.jpg" y esto activa la :ERRORetiqueta del segundo lote.

gracias por leer esto y por cualquier ayuda


Tiene mucha implicación en estos scripts ... Parece que :ERRORse llama a la rutina si alguna de estas dos condiciones es VERDADERA ... 1.) si existen archivos .jpgy alguno .pngen la ~\[00] - cópycarpeta o 2.) si 0.jpgexiste en la ~\[00] - cópycarpeta ¿Suena eso correcto? Considere rehacer su lógica para que sea más explícita y pase variables con a CALLpara las rutas, etc. y probablemente podría usar un script para ambas / todas las carpetas en lugar de tener la misma lógica en varios scripts si continúa teniendo problemas, siendo explícito siempre funciona bien para mi
Pimp Juice IT

@PimpJuiceIT sí, eso es correcto. Necesitaba compilar el modificador OR, por lo que si la carpeta tiene ambas (*, jpg y * .png, entonces) O si la identificación "% NAME% .jpg" en la carpeta, entonces quiero terminar con: ERROR label. Estoy buscando explícitamente la ejecución de estos lotes por separado. ¿Cómo es que no hay forma de lograr esto? Realmente siento que me falta una minoría importante en: NEXT label donde trato de LLAMAR / COMENZAR para el próximo lote
jugador0

Para probar, en lugar de usar el "%~dp0..\[00] %CC%\# hard.cmd"uso C:\Folder\path\× H\[00]\# hard.cmdexplícitamente de esa manera para cada uno en lugar del "%~dp0..\~y ver si eso lo resuelve. Si es así, verifique esas variables con %~dp0..y repítalas para ver si son correctas o qué. Solo una idea, pero solo puedo suponer que es algo relacionado con eso, o el #signo en el nombre del archivo cmd o algo por el estilo. No estoy seguro sin profundizar en ello con más detalle, pero ahora tengo poco tiempo. :ERRORInicialmente pensé que el problema iba a resolverse , por eso pregunté al respecto.
Pimp Juice IT

Respuestas:


0

encontré la pieza faltante PUSHD "%~dp0..\[00] %CC%\":

:NEXT
   IF EXIST   "%~dp0..\[00] %CC%\"     (
   PUSHD      "%~dp0..\[00] %CC%\"
   CALL       "%~dp0..\[00] %CC%\# hard.cmd"
   IF EXIST   "%~dp0..\[00] %CC%"  ( REN "%~dp0..\[00] %CC%"  "[02]" ) )
   ECHO DONE
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.