tagger tag windows batch-file cmd echo

windows - tagger - tag folders



¿Cómo puedo hacer que un script por lotes de Windows sea completamente silencioso? (5)

Ha habido variantes de esta pregunta durante generaciones, pero a pesar de escribir algunas secuencias de comandos de Windows bastante complicadas, parece que no puedo encontrar la manera de silenciarlas.

El siguiente es un extracto de uno de mis scripts actuales:

@ECHO OFF SET scriptDirectory=%~dp0 COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat FOR /F %%f IN (''dir /B "%scriptDirectory%*.noext"'') DO ( del "%scriptDirectory%%%f" ) ECHO

El resultado de esto es:

C:/Temp> test.bat 1 file(s) copied. File Not Found Echo is off. C:/Temp>

Considerando que el "1 archivo (s) copiado". es simplemente molesto, el "Archivo no encontrado" hace que el usuario piense que algo ha salido mal (lo cual no ha sucedido, ningún archivo está bien).


Copia un directorio llamado html y todos sus contenidos en un directorio de destino en modo silencioso. Si el directorio de destino no está presente, aún así lo creará.

@echo off TITLE Copy Folder with Contents set SOURCE=C:/labs set DESTINATION=C:/Users/MyUser/Desktop/html xcopy %SOURCE%/html/* %DESTINATION%/* /s /e /i /Y >NUL

  1. / S Copia directorios y subdirectorios, excepto los vacíos.

  2. / E Copia directorios y subdirectorios, incluidos los vacíos. Igual que / S / E. Puede usarse para modificar / T.

  3. / I Si el destino no existe y copia más de un archivo, se supone que el destino debe ser un directorio.

  4. / Y Suprime la solicitud para confirmar que desea sobrescribir un archivo de destino existente.

Para suprimir la salida, use la redirección a NUL .

Hay dos tipos de resultados que usan los comandos de la consola:

  • salida estándar, o stdout ,

  • error estándar, o stderr .

De los dos, stdout se usa con mayor frecuencia, tanto por comandos internos, como copy , y por utilidades de consola, o comandos externos , como find y otros, así como por programas de consola de terceros.

>NUL suprime la salida estándar y funciona bien, por ejemplo, para suprimir los 1 file(s) copied. mensaje del comando de copy . Una sintaxis alternativa es 1>NUL . Asi que,

COPY file1 file2 >NUL

o

COPY file1 file2 1>NUL

o

>NUL COPY file1 file2

o

1>NUL COPY file1 file2

suprime toda la salida estándar de COPY .

Para suprimir mensajes de error, que normalmente se imprimen en stderr , use 2>NUL lugar. Por lo tanto, para suprimir un mensaje de File Not Found que DEL imprime cuando, bueno, no se encuentra el archivo especificado, simplemente agregue 2>NUL al principio o al final de la línea de comando:

DEL file 2>NUL

o

2>NUL DEL file

Aunque a veces puede ser una mejor idea verificar realmente si el archivo existe antes de tratar de eliminarlo, como lo hace en su propia solución. Tenga en cuenta, sin embargo, que no necesita eliminar los archivos uno por uno, utilizando un bucle. Puede usar un solo comando para eliminar el lote:

IF EXIST "%scriptDirectory%*.noext" DEL "%scriptDirectory%*.noext"


Puede redirigir stdout a nul para ocultarlo.

COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >nul

Simplemente agregue >nul a los comandos de los que desea ocultar la salida.

Here puede ver todas las diferentes formas de redirigir las transmisiones estándar.


Si desea que todo el resultado normal de su secuencia de comandos por lotes sea silencioso (como en su ejemplo), la forma más fácil de hacerlo es ejecutar el archivo por lotes con una redirección:

C:/Temp> test.bat >nul

Este método no requiere modificar una sola línea en el script y aún muestra mensajes de error en la pantalla. Para suprimir todos los resultados, incluidos los mensajes de error:

C:/Temp> test.bat >nul 2>&1

Si su secuencia de comandos tiene líneas que producen resultados que desea que aparezcan en la pantalla, quizás sea más sencillo agregar una redirección a esas líneas en lugar de todas las líneas que desea mantener en silencio:

@ECHO OFF SET scriptDirectory=%~dp0 COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat FOR /F %%f IN (''dir /B "%scriptDirectory%*.noext"'') DO ( del "%scriptDirectory%%%f" ) ECHO REM Next line DO appear in the screen ECHO Script completed >con

Antonio


Simplemente agregue un >NUL al final de las líneas que producen los mensajes.

Por ejemplo,

COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >NUL