por off lotes lista lenguaje informatica ejemplos comandos batch bat avanzados archivos execution batch-file

execution - off - lenguaje batch



Cómo ejecutar secuencias de comandos por lotes sin usar la extensión*.bat (3)

¡Este es un tema interesante para mí! Quiero hacer algunas observaciones al respecto.

El punto importante primero: Un archivo por lotes es un archivo con extensión .BAT o .CMD. Período. Los archivos por lotes pueden lograr, además de la ejecución de los comandos habituales de DOS, ciertas instalaciones específicas de archivo por lotes, en particular:

  • Acceda a los parámetros del archivo por lotes mediante% 1% 2 ... y ejecute el comando SHIFT.
  • Ejecución del comando GOTO.
  • Ejecución del comando CALL: NAME ( subrutina interna ).
  • Ejecución de los comandos SETLOCAL / ENDLOCAL.

Ahora, la parte divertida: cualquier archivo puede redirigirse como entrada para CMD.exe, por lo que los comandos de DOS que contiene se ejecutan de forma similar a un archivo por lotes, con algunas diferencias. El más importante es que las instalaciones anteriores de archivos por lotes NO funcionarán. Se ilustran otras diferencias en el archivo NOT-Batch a continuación (lo llamé BATCH.TXT):

@echo off rem Echo off just suppress echoing of the prompt and each loop of FOR command rem but it does NOT suppress the listing of these commands! rem Pause command does NOT pause, because it takes the character that follows it pause X rem This behavior allows to put data for a SET /P command after it set /P var=Enter data: This is the data for previous command! echo Data read: "%var%" rem Complex FOR/IF commands may be assembled and they execute in the usual way: for /L %i in (1,1,5) do ( set /P line= if "!line:~0,6!" equ "SHOW: " echo Line read: !line:~6! ) NOSHOW: First line read SHOW: Second line NOSHOW: This is third line SHOW: The line number 4 NOSHOW: Final line, number five rem You may suppress the tracing of the execution redirecting CMD output to NUL rem In this case, redirect output to STDERR to display messages in the screen echo This is a message redirected to STDERR >&2 rem GOTO command doesn''t work: goto label goto :EOF rem but both EXIT and EXIT /B commands works: exit /B :label echo Never reach this point...

Para ejecutar el archivo anterior, escriba: CMD / V: ON <BATCH.TXT El conmutador / V es necesario para habilitar la expansión retrasada.

Las diferencias más especializadas están relacionadas con el hecho de que los comandos en el archivo NOT-Batch se ejecutan en el contexto de la línea de comandos , NO en el contexto del archivo por lotes. Tal vez Dave o jeb podrían dar más detalles sobre este punto.

EDITAR: Observaciones adicionales (batch2.txt):

@echo off rem You may force SET /P command to read the line from keyboard instead of rem from following lines by redirecting its input to CON device. rem You may also use CON device to force commands output to console (screen), rem this is easier to write and read than >&2 echo Standard input/output operations> CON echo/> CON < CON set /P var=Enter value: > CON echo/> CON echo The value read is: "%var%"> CON

Ejecute el archivo anterior de esta manera: CMD <BATCH2.TXT> NUL

EDITAR : más observaciones adicionales (batch3.txt)

@echo off rem Dynamic access to variables that usually requires DelayedExpansion via "call" trick rem Read the next four lines; "next" means placed after the FOR command rem (this may be used to simulate a Unix "here doc") for /L %i in (1,1,4) do ( set /P line[%i]= ) Line one of immediate data This is second line The third one And the fourth and last one... ( echo Show the elements of the array read: echo/ for /L %i in (1,1,4) do call echo Line %i- %line[%i]% ) > CON

Ejecute este archivo de la forma habitual: CMD <BATCH3.TXT> NUL

¡Interesante! ¿No es así?

EDITAR : ¡Ahora, los comandos GOTO y CALL se pueden simular en el archivo NotBatch.txt! Ver esta publicación

Antonio

¿Hay algún método en Windows a través del cual podamos ejecutar un script por lotes sin la extensión * .bat?


Podría ser posible sí, pero probablemente ni de manera fácil =) porque antes que nada ... seguridad. Intento hacer lo mismo hace un año, y hace un mes, pero no encontré ninguna solución al respecto. Podrías intentar hacer lo mismo.

ejecu.cmd

type toLaunch.txt >> bin.cmd call bin.cmd pause > nul exit

luego en toLaunch.txt puesto

@echo off echo Hello! pause > nul exit

solo como ejemplo, "compilará" el código, luego ejecutará el archivo de "salida", que es solo "analizar"

en lugar de analizarlo, también podría cambiar el nombre de uso y tal vez poner un cambio de nombre automático dentro de la secuencia de comandos utilizando dentro toLaunch.txt

ren %0 %0.txt

Espero que haya ayudado!


en mi caso, para hacer que Windows ejecute archivos sin extensión (solo para * .cmd, * .exe) observado, he omitido la variable pathext (en varailbles del sistema) para incluir .cmd. Una vez agregado, no tengo más para ejecutar file.cmd que simplemente file.

variables de entorno -> agregar / editar variable del sistema para incluir .cmd; .exe (por supuesto, su archivo debe estar en la ruta)