¿Cuáles son algunas de las características menos conocidas, pero importantes y útiles de los archivos por lotes de Windows?
Pautas:
- Una característica por respuesta
- Proporcione una breve descripción de la función y un ejemplo , no solo un enlace a la documentación
- Limite las respuestas a la funcionalidad nativa , es decir, no requiere software adicional, como el Kit de recursos de Windows
Aclaración: aquí nos referimos a los scripts procesados por cmd.exe, que es el predeterminado en las variantes de WinNT.
(Ver también: archivos por lotes de Windows: .bat vs .cmd? )
windows
batch-file
hidden-features
Chris Noe
fuente
fuente
call C:\WINDOWS\system32\ntbackup.exe backup /V:yes /R:no /RS:no /HC:off /M normal /L:s @daily.bks /F daily.bkf
. Y para comprender todos los parámetros de esa línea, simplemente ejecuteC:\WINDOWS\system32\ntbackup.exe /?
.Te lleva al directorio especificado por ruta .
Te lleva de vuelta al directorio desde el que "empujaste".
fuente
No estoy seguro de cuán útil sería esto en un archivo por lotes , pero es un comando muy conveniente para usar en el símbolo del sistema:
Esto abrirá el Explorador de Windows en la carpeta "some_directory".
He encontrado esto un gran ahorro de tiempo.
fuente
open .
hace lo mismo.start
hace mucho más que simplemente abrir la carpeta actual. Puede pasarle cualquier archivo y lo abrirá con el visor configurado. Déle una URL y se abrirá su navegador predeterminado, etc.Siempre me ha resultado difícil leer los comentarios marcados por una palabra clave en cada línea:
Más fácil de leer:
fuente
rem
tenga en cuenta que es una palabra clave documentada, mientras que::
es solo un detalle de implementación. Si bien es poco probable que::
deje de funcionar, generalmente es aconsejable no confiar en el comportamiento indocumentado.goto :
para saltar a la etiqueta.:-)
ygoto -)
también funcionará.Subcadenas variables:
fuente
for %a in ...
) ya que no requieren el signo de porcentaje de cierre como lo hacen las variables de entorno; primero debe asignarlos a una variable de entorno (¡usando expansión demorada!) y luego extraer una subcadena.El comando FOR ! Si bien odio escribir archivos por lotes, estoy agradecido por ello.
analizaría cada línea en myfile.txt, ignorando las líneas que comienzan con un punto y coma, pasando la segunda y tercera ficha de cada línea al cuerpo, con fichas delimitadas por comas y / o espacios. Observe que las declaraciones del cuerpo for hacen referencia a% i para obtener el segundo token,% j para obtener el tercer token y% k para obtener todos los tokens restantes después del 3er.
También puede usar esto para iterar sobre directorios, contenidos de directorio, etc.
fuente
En lugar de llenar una secuencia de comandos con REM o :: líneas, hago lo siguiente en la parte superior de cada secuencia de comandos:
Observe cómo puede usar los caracteres de canalización y redirección sin escapar de ellos.
fuente
La ruta (con unidad) donde está el script: ~ dp0
fuente
La pieza% ~ dp0 ya se mencionó, pero en realidad hay más: los caracteres después de ~ definen la información que se extrae.
Ningún resultado de la letra en el retorno del nombre del archivo de parche
d - devuelve la letra de unidad
p - devuelve la ruta
s - devuelve la ruta corta
x - devuelve la extensión del archivo
Entonces, si ejecuta el script test.bat a continuación desde c: \ Temp \ nombre de directorio largo \ carpeta,
obtienes el siguiente resultado
Y si se pasa un parámetro a su script como en la
prueba c: \ temp \ mysrc \ test.cpp,
se pueden hacer las mismas manipulaciones con la variable% 1.
¡Pero el resultado de la expansión de% 0 depende de la ubicación!
En el "nivel superior" del lote, se expande al nombre de archivo del lote actual.
En una función (llamada), se expande al nombre de la función.
La salida es (el archivo por lotes se inicia con myBatch.bat)
fuente
Al usar CALL, EXIT / B, SETLOCAL & ENDLOCAL puede implementar subrutinas con variables locales.
ejemplo:
Esto imprimirá
aunque: sub modifica x.
fuente
Truco astuto para esperar N segundos (no es parte de cmd.exe pero no es un software adicional ya que viene con Windows), vea la línea de ping. Necesita N + 1 pings ya que el primer ping se ejecuta sin demora.
fuente
Escapar de la "fontanería":
fuente
HEAD^
) es problemático.Ser capaz de ejecutar comandos y procesar la salida (como los backticks de '$ ()' en bash).
Si hay espacios en los nombres de archivo, use esto:
fuente
Crear un archivo vacío:
fuente
type nul > filename.ext
para eso.ren > blah.txt
Para ocultar toda la salida de un comando, redirija a> nul 2> & 1.
Por ejemplo, algunos programas de línea de comandos muestran resultados incluso si redirige a> nul. Pero, si redirige la salida como la línea de abajo, se suprimirá toda la salida.
EDITAR: Consulte Ignorar la salida de un comando para obtener una explicación de cómo funciona esto.
fuente
taskkill
.Detiene la ejecución y muestra el siguiente mensaje:
Es útil si desea ejecutar un lote haciendo doble clic en el Explorador de Windows y desea ver realmente el resultado en lugar de solo un destello de la ventana de comandos.
fuente
echo.|batch-with-pause.bat
tendrá el mismo efecto que pulsar la 'cualquier tecla' ...El equivalente de la fiesta (y otras conchas)
que genera "
Hello
" sin una nueva línea final. Un hack de cmd para hacer esto:set /p
es una forma de solicitar al usuario que ingrese. Emite la cadena dada y luego espera (en la misma línea, es decir, sin CRLF), para que el usuario escriba una respuesta.<nul
simplemente canaliza una respuesta vacía alset /p
comando, por lo que el resultado neto es la cadena de solicitud emitida. (La variable utilizada permanece sin cambios debido a la respuesta vacía).Los problemas son: no es posible generar un signo de igualdad inicial, y en Vista se eliminan los espacios en blanco iniciales, pero no en XP.
fuente
Busque y reemplace cuando establezca variables de entorno:
... elimina el "/" de una fecha para usar en nombres de archivo con marca de tiempo.
y subcadenas también ...
fuente
Aritmética de enteros:
fuente
Separadores de comando:
En la segunda línea, el comando después de && solo se ejecuta si el primer comando es exitoso.
En la tercera línea, el comando después de || solo se ejecuta si falla el primer comando.
fuente
Salida de una línea en blanco:
fuente
Puede encadenar sentencias if para obtener un efecto como un booleano de cortocircuito `y '.
fuente
if foo ( if bar ( baz ) )
(Imagínese saltos de línea después de los corchetes.)Para convertir rápidamente un archivo de texto Unicode (16 bits / char) en un archivo ASCII DOS (8 bits / char).
Como bonificación, si es posible, los personajes están correctamente mapeados.
fuente
si estructura de bloque:
fuente
%ERRORLEVEL%
todos modos; para esoif errorlevel <foo>
está. Y eso de hecho funciona en esos bloques.Expansión retardada de variables (con subcadenas incluidas).
fuente
No proporciona mucha funcionalidad, pero puede usar el comando de título para un par de usos, como proporcionar estado en un script largo en la barra de tareas, o simplemente para mejorar los comentarios de los usuarios.
fuente
¿No tiene un editor a mano y necesita crear un archivo por lotes?
Simplemente escriba los comandos, presione Entrar para una nueva línea. Presione Ctrl-Z e Intro para cerrar el archivo.
fuente
ejemplo de resta de cadenas en
date
ytime
para obtener el archivo llamado "AAAA-MM-DD HH: MM: SS.txt"Utilizo
color
para indicar si mi script termina con éxito, falla o necesita alguna entrada cambiando el color del texto y el fondo. Realmente ayuda cuando tienes alguna máquina al alcance de tu vista pero bastante lejosdonde X e Y es el valor hexadecimal de
0
aF
, donde X - fondo, Y - texto, cuando X = Y el color no cambiará.cambia el color del texto a 'Z' y establece el fondo negro, 'color 0' no funcionará
para nombres de colores llama
fuente
Control total sobre la salida con espaciado y caracteres de escape .:
fuente
TheSoftwareJedi ya mencionó el comando for, pero lo mencionaré nuevamente ya que es muy poderoso.
A continuación se muestra la fecha actual en el formato AAAAMMDD, lo uso al generar directorios para copias de seguridad.
fuente