Ms-Dos - Eliminar fichero con un batch

 
Vista:
sin imagen de perfil

Eliminar fichero con un batch

Publicado por Juanodark (7 intervenciones) el 21/08/2014 12:50:15
Buenos dias, querria preguntaros como extraer una cadena de una variable que esta en un for. Exactamente lo que hago es ir recorriendo los archivos que tiene una carpeta, paso el nombre del archivo a una variable y esa variable es la que quiero acortar pero no puedo al estar en un for. GRACIAS


SETLOCAL EnableDelayedExpansion

for /f %%a in ('dir /B /s /A-D "d:\Descarguico\"') do (

set dato=%%a
echo el dato es: !dato!

set dato2=!dato!:~0,-3%
rem ESTA ES LA LINEA QUE NO SALE

echo dato recortado: %dato2%

)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de A.H.H.

Eliminar fichero con un batch

Publicado por A.H.H. (216 intervenciones) el 21/08/2014 19:53:54
Hola se puede hacer de otra forma pero ya que quieres con un dir dentro del for me permito corregirte el código:
NO hace falta para este código enabledelayedexpansion.

COPIA Y PEGA el siguiente código en un bat para hacer la prueba...

1
2
3
4
5
6
7
@echo off
for /f %%a in ('dir /B /s /A-D "d:\Descarguico\"') do (set dato=%%a&call :cortar)
pause
:cortar
set dato=%dato:~0,-3%
echo %dato%
goto:eof

SALU2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Eliminar fichero con un batch

Publicado por Antoni Masana (811 intervenciones) el 22/08/2014 07:27:07
Falta un pequeño detalle

1
2
3
4
5
6
7
8
9
@echo off
for /f %%a in ('dir /B /s /A-D "d:\Descarguico\"') do (set dato=%%a&call :cortar)
pause
goto:eof
 
:cortar
   set dato=%dato:~0,-3%
   echo %dato%
   goto:eof

.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Eliminar fichero con un batch

Publicado por Juanodark (7 intervenciones) el 22/08/2014 11:59:14
De momento va bien pero esto añadiendo mas funciones, exactamente lo que me pasa es que tengo un programa de samsung para ver videos en el televisor, que lo que hace es que crea en las carpetas de los videos un archivo igual que el video pero con la extension mta en vez de avi. Entonces lo que quiero es que de una carpeta y subcarpetas me mire los archivos que tengo .mta y los borre si no existe su homologo en avi. Mi programa lo que intenta es:

* Primero mira todos los archivos que sean mta de una sola carpeta (faltarian las subcarpetas)
* Si es un mta mira todos los archivos de nuevo y metiendole la extension avi, si encuentra uno igual dejarlo y sino
borrar el mta.

Me falta:
Por un lado sacar la extension de la variable que no se como sacar los tres ultimos caracteres de una variable y guardarlos.
Meter una variable borrado que este en positivo y si se encuentra un fichero igual no se borre despues del for (esto es sencillo)


@echo off

for /f %%a in ('dir /B /s /A-D "d:\Descarguico\"') do (

set dato=%%a
call :cortar
if %ext% EQU mta
call :comparar
)

pause
goto:eof

:cortar
set ext=%dato:~,-3%
set dato=%dato:~0,-3%
echo %dato% con la extension %ext%


:comparar
for /f %%b in ('dir /B /s /A-D "d:\Descarguico\"') do (

set dato2=%%b
rem aqui falta tambien meterle la extension avi a %dato% para ver si hay una igual
IF %dato% EQU %dato2% echo %dato% y %dato2%


)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de A.H.H.

Eliminar fichero con un batch

Publicado por A.H.H. (216 intervenciones) el 22/08/2014 23:14:37
Hola de nuevo!! al saber ahora lo que quieres te expongo el código de otra forma:

*primero te muestro una lista de las mejoras que tiene el comando FOR con las que puedes imaginando que has puesto como variable %%a del for obtener diferentes cosas del archivo:

%%~fa - regresa la ruta y el archivo de %1.
%%~da - regresa la letra de la unidad de %1.
%%~pa - regresa solo la ruta del archivo %1.
%%~na - regresa solo el nombre de archivo %1.
%%~xa - regresa solo la extension del archivo %1.
%%~sa - regresa solo la ruta, con directorios, con nombres cortos del archivo %1.
%%~aa - regresa los atributos del archivo.
%%~ta - regresa la hora/fecha del archivo %1
%%~za - regresa el tamaño del archivo %1.


*segundo
el código que te expongo a continuación lo que hace es recorrer con un for RECURSIVAMENTE o sea dentro de las subcarpetas que tenga d:\descarguico todos los archivos.mta que existan y metemos como resultado dentro de la variable %RUTArchivMTA% la ruta completa con extensión del archivo.mta encontrado

y en otra variable llamada %soloruta% metemos solamente la ruta pero sin la extensión del archivo.mta

entonces COMO YA SABEMOS que existe en %soloruta% un MTA comprobamos si con la misma ruta EXISTIERA un archivo.avi


CODIGO para verificar si existe el compañero archivo.avi del archivo.mta

1
2
3
4
5
6
7
8
9
10
11
@echo off
FOR /R "d:\Descarguico" %%a in (*.mta) DO (set RUTArchivMTA=%%a&set soloruta=%%~dpna&call :comprobar)
pause
goto:eof
 
:comprobar
if exist "%soloruta%.avi" (echo SI EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
) else (
echo NO EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
del %RUTArchivMTA%)
goto:eof


AHORA solo tendras que cambiar en comprobar lo que quieres eliminar


espero te sirva...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Eliminar fichero con un batch

Publicado por Juanodark (7 intervenciones) el 23/08/2014 02:32:32
Pongo el codigo copiado tal que asi, pero no se que pasa que la sentencia del if hace que nada mas arrancar el bat se me cierre del tiron. Me lo hace cada vez que pongo un if y que le abro parentesis para poner varias cosas, si escribo el if del tiri no me pasa. Ademas ya me ha pasado con los otros if que hacia, sabes de que puede ser? Gracias por toda la ayuda.

@echo off
FOR /R "d:\Descarguico" %%a in (*.mta) DO (set RUTArchivMTA=%%a&set soloruta=%%~dpna&call :comprobar)
pause
goto:eof

:comprobar
if exist "%soloruta%.avi" (
echo SI EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
) else (
echo NO EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
del %RUTArchivMTA%
)
goto:eof
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de A.H.H.

Eliminar fichero con un batch

Publicado por A.H.H. (216 intervenciones) el 23/08/2014 09:13:51
Hola cópialo y pégalo tal como te lo pongo arriba en el anterior post.

A mi me funciona perfectamente he hecho la prueba creando una carpeta con unos archivos dentro .mta y .avi y algunos sin sus parejas y me elimina los .mta que no tienen como pareja su .avi.

lo único que cambio es que mi disco donde trabajo es C:\descarguico en vez de d:\descarguico pero el resto es lo mismo.

otra cosa veo que después del paréntesis del if seguidamente dejas la línea en blanco puede que ese sea el problema..

tiene que ser asi

if exist "%soloruta%.avi" (echo SI EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
) else (
echo NO EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
del %RUTArchivMTA%)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Eliminar fichero con un batch

Publicado por Juanodark (7 intervenciones) el 26/08/2014 13:33:45
Ya no me falla el programa con los if pero no me borra los mta, estan ocultos, pero eso da igual no? Es que no entra a :comprobar porque no saca ningun echo.


@echo off
FOR /R "d:\Descarguico" %%a in (*.mta) DO (set RUTArchivMTA=%%a&set soloruta=%%~dpna&call :comprobar)
pause
goto:eof


:comprobar
if exist "%soloruta%.avi" (echo SI EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
) else (
echo NO EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
del %RUTArchivMTA%)
echo %RUTArchivMTA%

goto:eof
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de A.H.H.

Eliminar fichero con un batch

Publicado por A.H.H. (216 intervenciones) el 26/08/2014 21:20:48
Hola de nuevo
se te olvido decir que los .mta eran ocultos!!!!
claro que tiene que ver!!, bueno he añadido unas cosas al código y ahora si funciona aunque los mta estén ocultos ya que les quita el atributo H osea oculto para poder tratar sobre ellos.

copia y pega exactamente el código en un bat y pruébalo...

1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
CD /D "d:\Descarguico"
ATTRIB -H *.mta /S
FOR /R "d:\Descarguico" %%a in (*.mta) DO (set RUTArchivMTA=%%a&set soloruta=%%~dpna&call :comprobar)
pause
EXIT
goto:eof
:comprobar
if exist "%soloruta%.avi" (echo SI EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
) else (
echo NO EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
del /P /S "%RUTArchivMTA%")
goto:eof

NOTA; si después de ejecutar el código quisieras volver a poner el atributo oculto a los archivos .mta tendrías que añadir la siguiente línea después del pause y antes de exit ..
1
2
3
4
5
6
7
8
9
.............
............
pause
 
CD /D "d:\Descarguico"
ATTRIB +H *.mta /S
exit
...................
............



salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Eliminar fichero con un batch

Publicado por Juanodark (7 intervenciones) el 26/08/2014 22:29:51
Vale, le he dado un par de vueltas y funciona de lujo, lo unico que se podria hacer para que mirase subcarpetas de descarguico tambien? Al final le he metido para que vuelva a poner los mta en oculto.

@echo off

CD /D "d:\Descarguico"
ATTRIB -H *.mta /S
FOR /R "d:\Descarguico" %%a in (*.mta) DO (set RUTArchivMTA=%%a&set soloruta=%%~dpna&call :comprobar)
EXIT
goto:eof

:comprobar
if exist "%soloruta%.avi" (echo SI EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
) else (
echo NO EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
del /S "%RUTArchivMTA%")

ATTRIB *.mta +H /S
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar fichero con un batch

Publicado por A.H.H. (1 intervención) el 26/08/2014 22:39:24
HOLA

ya hice con la opción /R del FOR que te entrara dentro de las subcarpetas fíjate crea una carpeta dentro de descarguico y dentro mete un avi y un mta y después si quieres prueba a eliminar el avi y dejar el mta solo. veras como lo detecta también....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Eliminar fichero con un batch

Publicado por Juanodark (7 intervenciones) el 26/08/2014 22:54:37
Esta con el /R el for y no funciona
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de A.H.H.

Eliminar fichero con un batch

Publicado por A.H.H. (216 intervenciones) el 26/08/2014 23:52:55
Hola
pues a mi si me funciona hago la prueba en mi caso en C:\descarguico

dentro de C:\descarguico he puesto 2 archivos :

documentoprueba.avi
documentoprueba.mta ....con atributo en oculto

También dentro de C:\descarguico una subcarpeta llamada Nueva carpeta osea c:\Descarguico\Nueva carpeta

y dentro de c:\Descarguico\Nueva carpeta he puesto un archivo llamado prueba.mta sin su compañero avi y también con su atributo oculto el resultado de ejecutar mi bat de prueba es el de la imagen siguiente.


http://www.andres.w.pw/imagen/Sin título.jpg
Sin título

Y DESPUES ESTO:

http://www.andres.w.pw/imagen/Sin título2.jpg
Sin título2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Eliminar fichero con un batch

Publicado por Juanodark (7 intervenciones) el 27/08/2014 00:34:12
Yo creo que tengo problemas con los espacios, porque al copiar el programa a un bloc de notas no me respeta los intros, mandame el .bat a [email protected] si puedes, porque seguro que es una chorrada, que no me sale ya ni los echo del if.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de A.H.H

Eliminar fichero con un batch

Publicado por A.H.H (216 intervenciones) el 27/08/2014 13:34:22
OK.! te lo envio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de A.H.H

Eliminar fichero con un batch

Publicado por A.H.H (216 intervenciones) el 28/08/2014 19:26:37
SOLUCIONADO

para que cogiera los archivos que en su nombre de archivo llevaran espacio o signos como paréntesis etc..
había que quitar unas comillas en el código y poner otras comillas en otra parte del código en cuanto al
final el código quedo asi, lo expongo para otra persona que le pudiera servir como a nuestro amigo
Juanodark que le sirvió perfectamente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
CD /D "d:\Descarguico"
ATTRIB -H *.mta /S
FOR /R "d:\Descarguico" %%a in (*.mta) DO (set RUTArchivMTA="%%a"&set soloruta=%%~dpna&call :comprobar)
pause
CD /D "d:\Descarguico"
ATTRIB +H *.mta /S
EXIT
goto:eof
:comprobar
if exist "%soloruta%.avi" (echo SI EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
) else (
echo NO EXISTE EL COMPAÑERO AVI DE %RUTArchivMTA%
del /P /S %RUTArchivMTA%)
goto:eof

Al ser los archivos *mta ocultos había problemas para eliminarlos y también al contener espacios y caracteres especiales por ejemplo.................... película.documental (spanish)-.mta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar