2010-12-14 9 views
5

tengo archivos por lotes con el constructo:determinar si existe una unidad flash de un archivo por lotes sin mensajes de error

if exist F:\ copy /y Application.exe F:\ 

al final de una compilación, para copiar el ejecutable a una llave USB si está enchufado pulg. Ha funcionado bien con las llaves USB, pero cuando conecté un lector de múltiples tarjetas USB (parece que las unidades E: .. H :, y si no hay una tarjeta SD conectada, cuando ejecuto la línea de lote anterior, Aparece un mensaje de "Windows sin disco"

Si hay una tarjeta conectada, no obtengo el mensaje (y el archivo se copia), si el lector de tarjetas no está enchufado, no entiendo el mensaje y el archivo no se copia (obviamente), pero en ninguno de estos casos el archivo por lotes deja de ejecutarse. Es solo si el lector de tarjetas está enchufado pero no hay una tarjeta en la unidad.

¿Puedo verificar silenciosamente que no haya "disco" en estas unidades USB desde un archivo por lotes?

Respuesta

7

Reemplace IF EXIST con DIR y utilice && o || según lo que desee que suceda.

Por ejemplo,

  • Para reemplazar IF EXIST...

    DIR F:\ && copy /y Application.exe F:\ 
    
  • Para reemplazar IF NOT EXIST

    DIR F:\ || copy /y Application.exe F:\ 
    

Si desea suprimir la salida estándar y STDERR del DIR para imitar el SI EXISTE exactamente ...

  • Para reemplazar IF EXIST...

    DIR F:\ 1>NUL 2>&1 && copy /y Application.exe F:\ 
    
  • Para reemplazar IF NOT EXIST

    DIR F:\ 1>NUL 2>&1 || copy /y Application.exe F:\ 
    
+0

Gracias @David. Funcionó una delicia.Utilizando la construcción 'si no existe F: \ echo hello' muestra un cuadro de diálogo' --------------------------- Windows - Sin disco --------------------------- Mensaje de procesamiento de excepción c0000013 Parámetros 75b6bf7c 4 75b6bf7c 75b6bf7c ------------ --------------- Cancelar Intentar nuevamente Continuar --------------------------- 'if F: \ se refiere a un lector de tarjetas USB sin una tarjeta conectada, mientras que usa 'DIR F: \ 1> NUL 2> & 1 || echo hello' solo echos 'hola' como debería. – rossmcm

0

Creo que antes se podía ejecutar command.com con un parámetro /F para que siempre fallara automáticamente esos mensajes de error para que no se rompiera en ellos. Sin embargo, no estoy seguro de eso y no estoy del todo seguro de si eso todavía funciona en Windows moderno.

0

DIR es aceptable sólo cuando el la unidad no está vacía

I no existen archivos en la unidad no funcionará incluso si la unidad está correctamente enchufado en

Uso CD lugar:.

CD F:\ && copy /y Application.exe F:\ 
0

if exist funcionará si se agrega NUL después F:\. De esta manera:

if exist F:\NUL copy /y Application.exe F:\ 
Cuestiones relacionadas