elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: [1]
1  Programación / Scripting / BATCH AYUDA ¿Cómo asignar a una variable, una ruta que contiene espacios? en: 22 Noviembre 2016, 07:05 am
Hola a todos. Soy nuevo en el foro, pero en bastantes ocasiones he navegado por aquí como invitado, e indirectamente me han ayudado a salir de varias dudas. Llevo bastantes horas lidiando con esto, y por más que he investigado en internet, no encuentro la forma de hacer lo que quiero. Espero que alguien de aquí pueda orientarme, debo de admitir que no tengo mucha experiencia programando. Sin más, paso a exponer mi duda:

Tengo configurada una NAS en un servidor, y la utilizo para respaldar la carpeta donde está la BDD de un sistema administrativo. Esta NAS es algo básica, y no hay mucho que se pueda configurar más allá de las rutas a respaldar. El detalle es que en ocasiones (bastante seguido), duplica algunos archivos, creando una copia exacta de estos, pero añadiéndoles la hora y fecha en el nombre. No hay forma de evitarlo, y después de unos meses funcionando así, ya me ha creado bastantes Gigas de datos duplicados.

Código:
CAC00007.dbf    --->Ejemplo de archivo original  
CAC00007-2016-11-13_09-40-41-849.dbf   --->Ejemplo de archivo duplicado

Llegados a este punto, me decidí por crear un batch que me eliminara los archivos que se iban duplicando. Primero creé este (al cual nombré ruta.bat),para eliminar los duplicados:

Código:
set nombre=%~n1
set last4=%nombre:~-4%
set guion=%last4:~0,1%
set last13=%nombre:~-13%
set guionb=%last13:~0,1%
IF "%guion%"=="-" (
goto :segundoif
) ELSE (
goto :terminar
)
:segundoif
IF "%guionb%"=="_" (
del "%rutafor%"
) ELSE (
goto :terminar
)
:terminar

En el código anterior hago referencia a la variable "%rutafor%", la cual declaro en este otro batch, el cual pensaba utilizar para correr el ruta.bat para cada uno de los archivos, en todos los subdirectorios:

Código:
for /R "C:\Directorio_a_respaldar_con_la_NAS\" %%v in (*) do  (
set rutafor=%%v
ruta %%v)

Tengo ambos archivos bat en la carpeta principal, y funciona: me borra solo los archivos duplicados de todos los subdirectorios, excepto de las carpetas que contienen espacios. Me parece que el problema es que al tratar de extraer el nombre, mediante nombre=%~n1, la ruta me la toma hasta el primer espacio. Sé que tal vez no sea la forma más eficiente de hacer esto, pero en principio debería funcionar...

Agradezco de antemano cualquier ayuda o sugerencia. ¡Saludos!

Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines