Quitar este error en batch

Iniciado por The Last Hero, 26 Marzo 2011, 15:02 PM

0 Miembros y 1 Visitante están viendo este tema.

The Last Hero

Hola a todo el mundo. Resulta que he hecho un bat,en el que si existen muchos archivos que los elimine, lo malo es que si no existen los archivos sale un error en la pantalla del bat, y es muy incomodo. Mi pregunta es...¿puedo poner algun codigo para que en vez de que salga-->ERROR:No se puede encontrar el archivo-->c:\tal\tal ponga archivo no encontrado? Es que lo he probado con todo y no sale,os dejo la sintaxis del codigo:

CitarFor %%s IN ("archivo1.exe"
"archivo2.exe"
"archivo3.exe"


) Do (
IF exist "%%s" (Del "%%s" \f

\q \i \s)
)
En cuanto llega a esa parte,imprime el error junto con el del archivo,y no quiero que el error  se vea en la pantalla del batch,solo el que si hay alguno de los nombres los elimine y si no hay que imprima en la pantalla no encontrado. :-\

Espero que me puedan ayudar,muchas gracias por adelantado.

SuperDraco

#1
Ya te lo dije la vez anterior... no se si el codigo original es como el que has posteado ahora, pero ese código no elimina nada, solo ejecuta el archivo1, luego el 2, y luego el 3...

Con el código que has posteado, te podrías saltar la parte del For, solo necesitas empezar desde el IF...

De todas formas toma, a ver si te funciona de coña xD...




Código (dos) [Seleccionar]

@echo off
setlocal enabledelayedexpansion


for /f "tokens=*" %%s in ('"Archivo1.exe"' "Archivo2"') do (
Set Nombre=%%s
IF exist %%s (
Del "%%s" \f \q \i \s >NUL 2>&1
Echo %%s Se ha eliminado.
) ELSE (
Echo !nombre! No se ha encontrado.
pause
goto:eof
)
)
pause




Aunque creo que seria mucho más comodo hacer el for con un type, me refiero a esto:


Dentro de Lista.txt tenemos escritos los nombres de los archivos, solo los nombres, y sin comillas, asi:
Archivo1.exe
Archivo2.exe
Archivo3.exe



Código (dos) [Seleccionar]

@echo off
Set Ruta="C:\TEST"


for /f "tokens=*" %%s in ('type Lista.txt') do (
IF exist "%%s" (
Del %Ruta%\"%%s" \f \q \i \s >NUL 2>&1
Echo %%s Se ha eliminado.
) ELSE (
Echo %%s No se ha encontrado.
goto:eof
)
)


pause




RESULTADO:

Archivo1.exe Se ha eliminado.
Archivo2.exe No se ha encontrado.
Archivo3.exe No se ha encontrado.
Presione una tecla para continuar . . .


Esta bien, solo tenia archivo1 :)



Espero que te sirva de ayuda..

Saludos!
No he vuelto, solo estoy de paso.

The Last Hero

Hola de nuevo pitoloko,he probado de nuevo tu codigo y sigue imprimiendo en el batch archivo no encontrado.El problema es que me gustaria solo que estuviera el batch,nada de bloc de notas,y alguna secuencia que diga borra esto,habia pensado en un if not exist... pero no creo que funciona o incluso en etiquetas goto pero no se... Me gustaria saber alguna forma de que todo se entornara en el batch,sin elementos externos como bloc de notas etc...

Gracias de nuevo por tu colaboracion...

Un saludo

SuperDraco

#3
Entonces ponte a crear variables...


Código (dos) [Seleccionar]

@echo off
setlocal enabledelayedexpansion


for /f "tokens=1,2,3,4,5,6,7,8,9 delims=;" %%a in ('"echo c:\d\Archivo1.exe;C:\Windows\system32\xupala\xupalaaaaVIRUS.exe;c:\tikitaka\virus del tikitaka.rom"') do (
echo %%a
echo %%b
echo %%c
pause
)
IF exist %TOKEN% (
Del !TOKEN! \f \q \i \s >NUL 2>&1
Echo !TOKEN! Se ha eliminado.
) ELSE (
  Echo !TOKEN! No se ha encontrado.
  goto:eof
)
)



pause




El codigo no va,pero puedes probarlo para ver el resultado primero, el problema es que no se me ocurre como crear la variable para cada Token :/ , pero mira, es una idea que te doy xDDDDDD esta vez no t lo voy a poder solucionar, ya veré si se me ocurre algo, saludosss
No he vuelto, solo estoy de paso.

SuperDraco

Listo:

Cada token es una variable, osea:

tokens=   1            2         3           4
Variabl=%%a   %%b   %%c   %%d



A ver si este te sirve :P





Código (dos) [Seleccionar]

@echo off
setlocal enabledelayedexpansion
Set Token=

for /f "tokens=1,2,3,4,5,6,7,8,9 delims=;" %%a in ('"echo c:\d\Archivo1.exe;c:\d\ARCHIVO2.exe;C:\Windows\system32\xupala\xupalaaaaVIRUS.exe;c:\tikitaka\virus del tikitaka.rom;"') do (
Set Token=%%a
call :Comprobar
Set Token=%%b
call :Comprobar
Set Token=%%c
call :Comprobar
Set Token=%%d
call :Comprobar
)

PAUSE

:Comprobar
IF exist %TOKEN% (
Del !TOKEN! \f \q \i \s >NUL 2>&1
Echo !TOKEN! Se ha eliminado.
) ELSE (
  Echo !TOKEN! No se ha encontrado.

  goto:eof
)




No he vuelto, solo estoy de paso.

leogtz

Lo primero que debiste de decir, es "en donde estarán los archivos a eliminar", o en donde se supone que deberían estar, es por eso que estamos teniendo problemas de archivos no encontrados.

Código (dos) [Seleccionar]
cd ALGUNA_RUTA_DONDE_PODRIAN_ESTAR_LOS_ARCHIVOS
for /f "tokens=*" %%f in ("file_1.txt", "file_2.txt", "file_3.txt") do (
for /f "tokens=*" %%_ in ('dir /b /s "%%f"') do (
del /f /q "%%_"
)
)
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

The Last Hero

Buenas de nuevo,puse esta secuencia y me da otro tipo de error  :xD algo de comando me dio tiempo a leer:

Citar@echo off
setlocal enabledelayedexpansion
Set Token=

for /f "tokens=1,2,3,4,5,6,7,8,9 delims=;" %%a in ('"%Temp%\archivo.exe;
%Windir%\archivo1.exe;
%Windir%\archivo2.dll;
%Windir%\archivo2.exe;
%Windir%\Temp\archivo1.tmp;
%Windir%\archivo3.exe;"') do (
   Set Token=%%a
   call :Comprobar
   Set Token=%%b
   call :Comprobar
   Set Token=%%c
   call :Comprobar
   Set Token=%%d
   call :Comprobar
)

PAUSE

:Comprobar
IF exist %TOKEN% (
   Del !TOKEN! \f \q \i \s >NUL 2>&1
   Echo !TOKEN! Se ha eliminado.
) ELSE (
      Echo !TOKEN! No se ha encontrado.

      goto:eof
)

En cuanto a tu respuesta Leo, es que son en varios directorios,temp,windows,system32,escritorio...por eso no puedo especificar todos.

Gracias a ambos por la paciencia y por la participacion  ;-)

Un saludo

SuperDraco

aldita sea, pero ponle el ECHO dentro del for '¬¬ no modifiques tanto el ejemplo que te puse xD, pruebalo solo cambiandlo las rutas de los archivos, no le quites el echo y deja las comillas como estan, y di si asi te va, al menos a mi si me fue :P

saludosss



for /f "tokens=1,2,3,4,5,6,7,8,9 delims=;" %%a in ('"echo %Temp%\archivo.exe;%Windir%\archivo1.exe;etc..."')


PD: El ejemplo de Leo es buenisimo y muy simple, es la diferencia entre el y yo jaja el te pone los buenos :xD y yo los mediocres, pero el mio tambien sirve! ponle el echo.
No he vuelto, solo estoy de paso.

The Last Hero

Nada,sigue igual,un error y se cierra la pantalla,con el echo incluido -_-"

Citar@echo off
setlocal enabledelayedexpansion
Set Token=

for /f "tokens=1,2,3,4,5,6,7,8,9 delims=;" %%a in ('" echo %Temp%\archivo.exe;
%Windir%\archivo1.exe;
%Windir%\archivo2.dll;
%Windir%\archivo2.exe;
%Windir%\Temp\archivo1.tmp;
%Windir%\archivo3.exe;"') do (
   Set Token=%%a
   call :Comprobar
   Set Token=%%b
   call :Comprobar
   Set Token=%%c
   call :Comprobar
   Set Token=%%d
   call :Comprobar
)

PAUSE

:Comprobar
IF exist %TOKEN% (
   Del !TOKEN! \f \q \i \s >NUL 2>&1
   Echo !TOKEN! Se ha eliminado.
) ELSE (
      Echo !TOKEN! No se ha encontrado.

      goto:eof
)

[/b]


SuperDraco

#9
En serio, es pa matarte... xd


for /f "tokens=1,2,3,4,5,6,7,8,9 delims=;" %%a in ('"echo %Temp%\archivo.exe;%Windir%\archivo1.exe;%Windir%\archivo2.dll;%Windir%\archivo2.exe;%Windir%\Temp\archivo1.tmp;%Windir%\archivo3.exe;"') do (

así es como te digo, NO LO CAMBIES, PRUEBALO ASÍ.


rESULTADO:
C:\Users\PiToLoKo\AppData\Local\Temp\archivo.exe No se ha encontrado.
C:\Windows\archivo1.exe No se ha encontrado.
C:\Windows\archivo2.dll No se ha encontrado.
C:\Windows\archivo2.exe No se ha encontrado.
Presione una tecla para continuar . . .

No he vuelto, solo estoy de paso.