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

Te dejo el de los scripts para que le eches un vistazo,ya que se me cierra la ventana:

@echo off
for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 delims=;" %%b in ('"echo arc1.exe;arch2.exe;arch3.exe;arch4.exe;arch5.exe;arch6.exe;arch7.exe;arch8.exe;arch9.exe;arch10.exe;arch11.exe;arch12.exe;arch13.exe;arch14.exe;arch15.exe;arch16.exe;arch17.exe;arch18.exe;arch19.exe;arch20.exe;arch21.exe;arch22.exe;arch23.exe;arch24.exe;arch25.exe;arch26.exe"') do (

  Set Token=%%a
  call :Comprobarpro
  Set Token=%%b
  call :Comprobarpro
  Set Token=%%c
  call :Comprobarpro
  Set Token=%%d
  call :Comprobarpro
Set Token=%%e
  call :Comprobarpro
Set Token=%%f
  call :Comprobarpro
Set Token=%%h
call :Comprobarpro
Set Token=%%i
call :Comprobarpro
Set Token=%%j
call :Comprobarpro
Set Token=%%k
call :Comprobarpro
Set Token=%%l
call :Comprobarpro
Set Token=%%m
call :Comprobarpro
Set Token=%%n
call :Comprobarpro
Set Token=%%ñ
call :Comprobarpro
Set Token=%%o
call :Comprobarpro
Set Token=%%p
call :Comprobarpro
Set Token=%%q
call :Comprobarpro
Set Token=%%r
call :Comprobarpro
Set Token=%%s
call :Comprobarpro
Set Token=%%t
call :Comprobarpro
Set Token=%%u
call :Comprobarpro
Set Token=%%v
call :Comprobarpro
Set Token=%%w
call :Comprobarpro
Set Token=%%x
call :Comprobarpro
Set Token=%%y
call :Comprobarpro
Set Token=%%z
call :Comprobarpro





)

Goto :END





:Comprobarpro
IF exist %TOKEN% (
attrib -h !TOKEN!
  Taskkill !TOKEN! \f \q \i \s >NUL 2>&1
  Echo !TOKEN! Se ha eliminado procesos en la memoria
  Echo !TOKEN! >> Archivo.txt
  goto:eof
) ELSE (
     Echo !TOKEN! No se ha encontrado procesos en la memoria
     Echo !TOKEN! >> Archivo2.txt
     goto:eof
)






:END
cls
echo+ >> Archivo.txt
Echo /Arcihvos no encontrados: >> Archivo.txt
echo+ >> Archivo.txt
copy Archivo.txt+Archivo2.txt >NUL 2>&1
Del /Q Archivo2.txt >NUL 2>&1
Type Archivo.txt
PAUSE >nul


No se que hice mal esta vez,pero vuelve a cerrarse y no deja leer nada -_- debajo de este esta el de los archivos, este es el de proceso. y le cambie el nombre a comprbarpro para que no se liara con el otro comprobar.

En cuanto a duplicar el for...seria uno como este y luego debajo otro igual pero con las rutas cambiadas?¿se tienen que poner las rutas una detras de otra o se pueden poner en columnas?

Un saludo amigo ::)

SuperDraco

#21
no uses la Ñ

Retiro lo dicho, a mi me funciona xD

le pusiste el setlocal enabledelayedexpansion? ponselo
No he vuelto, solo estoy de paso.

The Last Hero

Madre mia... aunque cambie la ñ se cierra la pantalla,¿Ves algun error por ahi? es que lo estoy repasando y no veo nada. He quitado lo de attrib -h pero sigue sin funcionar... creo que he puesto algo mal en el codigo o no se...

SuperDraco

#23
Sin la Ñ, desde un script no la puedes escribir de ese modo.


El bat no se me cierra, debes estar haciendo alguna tonteria xD

EDITO: No no se puede poner en columnas. y sería algo asi:

aqui va el Primer FOR
aqui el Segundo FOR
Goto :end

aqui comprobar
aqui ComprobarPRO
aqui END



Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion

for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 delims=;" %%a in ('"echo arc1.exe;arch2.exe;arch3.exe;arch4.exe;arch5.exe;arch6.exe;arch7.exe;arch8.exe;arch9.exe;arch10.exe;arch11.exe;arch12.exe;arch13.exe;arch14.exe;arch15.exe;arch16.exe;arch17.exe;arch18.exe;arch19.exe;arch20.exe;arch21.exe;arch22.exe;arch23.exe;arch24.exe;arch25.exe;arch26.exe"') do (

  Set Token=%%a
  call :Comprobarpro
  Set Token=%%b
  call :Comprobarpro
  Set Token=%%c
  call :Comprobarpro
  Set Token=%%d
  call :Comprobarpro
Set Token=%%e
call :Comprobarpro
Set Token=%%f
call :Comprobarpro
Set Token=%%h
call :Comprobarpro
Set Token=%%i
call :Comprobarpro
Set Token=%%j
call :Comprobarpro
Set Token=%%k
call :Comprobarpro
Set Token=%%l
call :Comprobarpro
Set Token=%%m
call :Comprobarpro
Set Token=%%n
call :Comprobarpro
Set Token=%%o
call :Comprobarpro
Set Token=%%p
call :Comprobarpro
Set Token=%%q
call :Comprobarpro
Set Token=%%r
call :Comprobarpro
Set Token=%%s
call :Comprobarpro
Set Token=%%t
call :Comprobarpro
Set Token=%%u
call :Comprobarpro
Set Token=%%v
call :Comprobarpro
Set Token=%%w
call :Comprobarpro
Set Token=%%x
call :Comprobarpro
Set Token=%%y
call :Comprobarpro
Set Token=%%z
call :Comprobarpro
)

Goto :END





:Comprobarpro
IF exist %TOKEN% (
  attrib -h "!TOKEN!"
  Taskkill /F /T /im "!TOKEN!" >NUL 2>&1
  Echo !TOKEN! Se ha eliminado procesos en la memoria
  Echo !TOKEN! >> Archivo.txt
  goto:eof
) ELSE (
     Echo !TOKEN! No se ha encontrado procesos en la memoria
     Echo !TOKEN! >> Archivo2.txt
     goto:eof
)






:END
cls
echo+ >> Archivo.txt
Echo /Arcihvos no encontrados: >> Archivo.txt
echo+ >> Archivo.txt
copy Archivo.txt+Archivo2.txt >NUL 2>&1
Del /Q Archivo2.txt >NUL 2>&1
Type Archivo.txt
PAUSE >nul
No he vuelto, solo estoy de paso.

The Last Hero

Te paso el codig entero,esta bien menos lo primero, que me imprime !TOKEN! muchas veces pero no los archivos.

@echo off
for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 delims=;" %%b in ('"echo arc1.exe;arch2.exe;arch3.exe;arch4.exe;arch5.exe;arch6.exe;arch7.exe;arch8.exe;arch9.exe;arch10.exe;arch11.exe;arch12.exe;arch13.exe;arch14.exe;arch15.exe;arch16.exe;arch17.exe;arch18.exe;arch19.exe;arch20.exe;arch21.exe;arch22.exe;arch23.exe;arch24.exe;arch25.exe;arch26.exe"') do (

   Set Token=%%a
   call :Comprobarpro
   Set Token=%%b
   call :Comprobarpro
   Set Token=%%c
   call :Comprobarpro
   Set Token=%%d
   call :Comprobarpro
Set Token=%%e
   call :Comprobarpro
Set Token=%%f
   call :Comprobarpro
Set Token=%%h
call :Comprobarpro
Set Token=%%i
call :Comprobarpro
Set Token=%%j
call :Comprobarpro
Set Token=%%k
call :Comprobarpro
Set Token=%%l
call :Comprobarpro
Set Token=%%m
call :Comprobarpro
Set Token=%%n
call :Comprobarpro
Set Token=%%ñ
call :Comprobarpro
Set Token=%%o
call :Comprobarpro
Set Token=%%p
call :Comprobarpro
Set Token=%%q
call :Comprobarpro
Set Token=%%r
call :Comprobarpro
Set Token=%%s
call :Comprobarpro
Set Token=%%t
call :Comprobarpro
Set Token=%%u
call :Comprobarpro
Set Token=%%v
call :Comprobarpro
Set Token=%%w
call :Comprobarpro
Set Token=%%x
call :Comprobarpro
Set Token=%%y
call :Comprobarpro
Set Token=%%z
call :Comprobarpro





)

Goto :END





:Comprobarpro
IF exist %TOKEN% (
   Taskkill !TOKEN! \f \im >NUL 2>&1
   Echo !TOKEN! Se ha eliminado procesos en la memoria
   Echo !TOKEN! >> Archivo.txt
   goto:eof
) ELSE (
      Echo !TOKEN! No se ha encontrado procesos en la memoria
      Echo !TOKEN! >> Archivo2.txt
      goto:eof
)






:END
cls
echo+ >> Archivo.txt
Echo /Arcihvos no encontrados: >> Archivo.txt
echo+ >> Archivo.txt
copy Archivo.txt+Archivo2.txt >NUL 2>&1
Del /Q Archivo2.txt >NUL 2>&1
Type Archivo.txt
PAUSE >nul


setlocal enabledelayedexpansion
Set Token=

Echo /Arcihvos encontrados: > Archivo.txt
echo+ >> Archivo.txt


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

   call :Comprobar
Set Token=%%h




)

Goto :END





:Comprobar
IF exist %TOKEN% (
attrib -h !TOKEN!
   Del TOKEN \f \q \i \s >NUL 2>&1
   Echo TOKEN Se ha eliminado.
   Echo !TOKEN! >> Archivo.txt
   goto:eof
) ELSE (
      Echo !TOKEN! No se ha encontrado.
      Echo !TOKEN! >> Archivo2.txt
      goto:eof
)






:END
cls
echo+ >> Archivo.txt
Echo /Arcihvos no encontrados: >> Archivo.txt
echo+ >> Archivo.txt
copy Archivo.txt+Archivo2.txt >NUL 2>&1
Del /Q Archivo2.txt >NUL 2>&1
Type Archivo.txt

PAUSE >nul

SuperDraco

Voy a ser bueno...

setlocal enabledelayedexpansion

setlocal enabledelayedexpansion

!!!!!!!!!!!!!!!!! setlocal enabledelayedexpansion !!!!!!!!!!!!!!!!!!!!!


Si es que no te miras mis comentarios he xd
No he vuelto, solo estoy de paso.

The Last Hero

#26
Si tienes razon pitoloko,lo tenia en uno pero en el otro no lo puse, es que tantas veces modificar el codigo se deja pasar algo...

Lo he puesto pero me aparece lo de !TOKEN! muchas veces y tambien archivos no encontrados 4 veces y en algunos en vez de aparecer el nombre del archivo aparece %a,%u,%u y asi...

¿como puedo subir una foto para que lo veas?

Ya me contaras.

Edito:te pego el codigo que me dijstes,primeros los FOR luego el goto:end luego el comprobar y comprobarpro y el END:

@echo off
setlocal enabledelayedexpansion
Set Token=

for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 delims=;" %%b in ('"echo arc1.exe;arch2.exe;arch3.exe;arch4.exe;arch5.exe;arch6.exe;arch7.exe;arch8.exe;arch9.exe;arch10.exe;arch11.exe;arch12.exe;arch13.exe;arch14.exe;arch15.exe;arch16.exe;arch17.exe;arch18.exe;arch19.exe;arch20.exe;arch21.exe;arch22.exe;arch23.exe;arch24.exe;arch25.exe;arch26.exe"') do (

  Set Token=%%a
  call :Comprobarpro
  Set Token=%%b
  call :Comprobarpro
  Set Token=%%c
  call :Comprobarpro
  Set Token=%%d
  call :Comprobarpro
Set Token=%%e
  call :Comprobarpro
Set Token=%%f
  call :Comprobarpro
Set Token=%%h
call :Comprobarpro
Set Token=%%i
call :Comprobarpro
Set Token=%%j
call :Comprobarpro
Set Token=%%k
call :Comprobarpro
Set Token=%%l
call :Comprobarpro
Set Token=%%m
call :Comprobarpro
Set Token=%%n
call :Comprobarpro
Set Token=%%g
call :Comprobarpro
Set Token=%%o
call :Comprobarpro
Set Token=%%p
call :Comprobarpro
Set Token=%%q
call :Comprobarpro
Set Token=%%r
call :Comprobarpro
Set Token=%%s
call :Comprobarpro
Set Token=%%t
call :Comprobarpro
Set Token=%%u
call :Comprobarpro
Set Token=%%v
call :Comprobarpro
Set Token=%%w
call :Comprobarpro
Set Token=%%x
call :Comprobarpro
Set Token=%%y
call :Comprobarpro
Set Token=%%z
call :Comprobarpro



setlocal enabledelayedexpansion
Set Token=


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

  call :Comprobar
Set Token=%%h




)

Goto :END


:Comprobarpro
IF exist %TOKEN% (
  Taskkill !TOKEN! \f \im >NUL 2>&1
  Echo !TOKEN! Se ha eliminado procesos en la memoria
  Echo !TOKEN! >> Archivo.txt
  goto:eof
) ELSE (
     Echo !TOKEN! No se ha encontrado procesos en la memoria
     Echo !TOKEN! >> Archivo2.txt
     goto:eof
)








:Comprobar
IF exist %TOKEN% (
attrib -h !TOKEN!
  Del TOKEN \f \q \i \s >NUL 2>&1
  Echo TOKEN Se ha eliminado.
  Echo !TOKEN! >> Archivo.txt
  goto:eof
) ELSE (
     Echo !TOKEN! No se ha encontrado.
     Echo !TOKEN! >> Archivo2.txt
     goto:eof
)






:END
cls
echo+ >> Archivo.txt
Echo /Arcihvos no encontrados: >> Archivo.txt
echo+ >> Archivo.txt
copy Archivo.txt+Archivo2.txt >NUL 2>&1
Del /Q Archivo2.txt >NUL 2>&1
Type Archivo.txt
PAUSE >nul

Un saludo

SuperDraco

Ese último código que has posteado, es como lo tienes ahora mismo? Porque a mi nisiquiera se me "abre" xD dime si es el "bueno" para trabajar con el.
No he vuelto, solo estoy de paso.

The Last Hero

Ahora a mi tampoco xD estaba trasteando un poco, modificandolo y eso, solo cuando pongo el codigo de los archivos funciona genial, pero cuando pongo el de los procesos imprime las variables tal cual estan escritas -->%%a, y muchas veces !TOKEN! ademas aparece la opcion no se ha encontrado dos veces, cuando deberia poner procesos no detectados y no se ha encontrado. Hice uno antes y salia todo menos los de los procesos,eliminando errores en mi script, pero ahora lo he borrado asique mejor empezar con este  :-\

Gracias por la paciencia pitoloko y de nuevo mis disculpas por la pesadez  :xD

Un saludo

SuperDraco

#29
Puf, es que este code que te puse ya dijimos que iba bien...

Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion

for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 delims=;" %%a in ('"echo arc1.exe;arch2.exe;arch3.exe;arch4.exe;arch5.exe;arch6.exe;arch7.exe;arch8.exe;arch9.exe;arch10.exe;arch11.exe;arch12.exe;arch13.exe;arch14.exe;arch15.exe;arch16.exe;arch17.exe;arch18.exe;arch19.exe;arch20.exe;arch21.exe;arch22.exe;arch23.exe;arch24.exe;arch25.exe;arch26.exe"') do (

  Set Token=%%a
  call :Comprobarpro
  Set Token=%%b
  call :Comprobarpro
  Set Token=%%c
  call :Comprobarpro
  Set Token=%%d
  call :Comprobarpro
Set Token=%%e
call :Comprobarpro
Set Token=%%f
call :Comprobarpro
Set Token=%%h
call :Comprobarpro
Set Token=%%i
call :Comprobarpro
Set Token=%%j
call :Comprobarpro
Set Token=%%k
call :Comprobarpro
Set Token=%%l
call :Comprobarpro
Set Token=%%m
call :Comprobarpro
Set Token=%%n
call :Comprobarpro
Set Token=%%o
call :Comprobarpro
Set Token=%%p
call :Comprobarpro
Set Token=%%q
call :Comprobarpro
Set Token=%%r
call :Comprobarpro
Set Token=%%s
call :Comprobarpro
Set Token=%%t
call :Comprobarpro
Set Token=%%u
call :Comprobarpro
Set Token=%%v
call :Comprobarpro
Set Token=%%w
call :Comprobarpro
Set Token=%%x
call :Comprobarpro
Set Token=%%y
call :Comprobarpro
Set Token=%%z
call :Comprobarpro
)

Goto :END





:Comprobarpro
IF exist %TOKEN% (
  attrib -h "!TOKEN!"
  Taskkill /F /T /im "!TOKEN!" >NUL 2>&1
  Echo !TOKEN! Se ha eliminado procesos en la memoria
  Echo !TOKEN! >> Archivo.txt
  goto:eof
) ELSE (
     Echo !TOKEN! No se ha encontrado procesos en la memoria
     Echo !TOKEN! >> Archivo2.txt
     goto:eof
)






:END
cls
echo+ >> Archivo.txt
Echo /Arcihvos no encontrados: >> Archivo.txt
echo+ >> Archivo.txt
copy Archivo.txt+Archivo2.txt >NUL 2>&1
Del /Q Archivo2.txt >NUL 2>&1
Type Archivo.txt
PAUSE >nul




Ya me canso de hacerlo por ti xD tus fallos son muy tontos , no son fallos grandes, es que no te fijas mucho en lo que haces... en el último code que has posteado le falta un parentesis al acabar el for :/


Solo tienes que meter :ComprobarPRO debajo de :Comprobar, y un for debajo del FOR que ya está echo (En el script de ahora)

Ah, y no empieces el for con "%%b", puedes hacer todos los que quieras empezando por %%a

saludosss
No he vuelto, solo estoy de paso.