Crear archivo bat que cree una carpeta con la fecha de hoy y mueva archivos a esa misma carpeta

1.- Ya pude con este código crear la carpeta con la fecha de hoy

2.- ya me quedo de la siguiente manera:

3.- **Me gustaría que la fecha el año fuera de 4 dígitos en lugar de 310122 que sea 31012022, si no así esta bien :)**

4.- Mover todos estos archivos a la carpeta que se creo con la fecha de hoy:

5.- EXCEPTO LOS SIGUIENTES QUE VOY A SUBRAYAR:

Respuesta
1

Prueba con esto:

@echo off
set destino=c:\Users\Daniel Macias\Documents
set origen=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set excluir=c:\users\Daniel Macias\Documents\exclusiones.txt
set dirfecha=%date:~0,2%%date:~3,2%%date:~6,4%
pushd %destino%
rem rd /s /q %dirfecha%
mkdir %dirfecha%
xcopy /D /S /Y /I /H "%origen%" "%dirfecha%" /exclude:%excluir%
Popd
Pause

He intentado "generalizar" un poco la respuesta de modo que puedas elegir la carpeta de DESTINO (carpeta local de tu equipo) y la de ORIGEN (carpeta en la "nube" del One Drive de tu usuario). Los archivos a excluir de la copia (aunque hablas de mover el hecho de que uses XCOPY da a entender que lo que quieres es copiar, no mover) están recogidos en el archivo EXCLUSIONES.TXT situado en el path indicado en la variable EXCLUIR. Este archivo, en el caso de tu ejemplo, tendría este aspecto:

0OBSERVACIONES.xlsx
PEDIDO SANTA MARIA 25012022d.xlsx
REALIZACION PEDIDO SANTA.xlsm

Prueba y nos dices como te ha ido.

Se me olvidó aclarar que el comando comentado (RD /S /Q %DIRFECHA%) puede ser útil durante las pruebas porque borra el directorio antes de volver a crearlo.

Hola muchas gracias esta funcionando SUPER bien

Solo que la carpeta de la fecha va en la misma carpeta de one drive

c:\Users\Daniel Macias\OneDrive\PIE\SANTA

Me salió que no puede hacerse una copia cíclica

¿Y otra duda así debo de hacer las exclusiones?

@echo off
set destino=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set origen=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set excluir=c:\Users\Daniel Macias\OneDrive\PIE\SANTA\0OBSERVACIONES.XLSX
set excluir=c:\Users\Daniel Macias\OneDrive\PIE\SANTA\PEDIDO SANTA MARIA.XLSX
set excluir=c:\Users\Daniel Macias\OneDrive\PIE\SANTA\REALIZACION PEDIDO.XLSX
set dirfecha=%date:~0,2%%date:~3,2%%date:~6,4%
pushd %destino%
rem rd /s /q %dirfecha%
mkdir %dirfecha%
xcopy /D /S /Y /I /H "%origen%" "%dirfecha%" /exclude:%excluir%
Popd
Pause

Todo en la misma carpeta de one drive

Para empezar creo que es mejor que utilices la herramienta "snippet" de la página (icono <>) para insertar los códigos en lugar de escribirlos en el propio texto.

En segundo lugar parece que la razón de que te esté haciendo las copias en el propio OneDrive tiene que ver con el hecho de que en lugar de

set destino=c:\Users\Daniel Macias\Documents

hayas usado (según lo que has escrito en tu respuesta):

set destino=c:\Users\Daniel Macias\OneDrive\PIE\SANTA

Respecto a las exclusiones, tal como te decía, debes crear un archivo TXT aparte del BAT, al que puedes llamar como quieras (yo sugería EXCLUSIONES.TXT) y situarlo en alguna carpeta de tu elección (yo sugería c:\Users\Daniel Macias\Documents). La variable EXCLUIR del BAT debe incluir  el path completo del archivo de exclusiones.

Si tienes dudas respecto a algo dímelo e intentaré aclarártelo.

Buen día ya me quedo claro lo de las exclusiones :)

Para darme a entender mejor lo que quiero es mover los archivos de

c:\Users\Daniel Macias\OneDrive\PIE\SANTA

a la carpeta que me va a crear la fecha pero en la misma ubicacion de aqui:

c:\Users\Daniel Macias\OneDrive\PIE\SANTA

Para explicarme mejor quiero que en lugar de yo crear una carpeta con la fecha y arrastar lo exceles a esa carpeta me lo haga automaticamente con el bat

Espero me haya dado a entender mejor

Gracias por las atenciones :)

Creía que te había respondido pero ahora veo que no figura mi respuesta. Parece claro que malinterpreté tu información al extraer de tus pruebas en CMD la carpeta de destino. Si te he entendido bien ahora, este sería el bat a utilizar:

@echo off
set origen=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set excluir=c:\Users\Daniel Macias\Documents\exclusiones.txt
set dirfecha=%date:~0,2%%date:~3,2%%date:~6,4%
pushd %origen%
rd /s /q %dirfecha%
mkdir %dirfecha%
xcopy "*.*" "%dirfecha%\*.*" /exclude:%excluir%
Popd

Te he quitado el REM que comentaba el comando RD /S /Q %DIRFECHA% para que puedas hacer pruebas repetidas sobre las mismas carpetas y he quitado las opciones del XCOPY que no tienen mucho sentido en este caso (y que podían estar detrás del error de la "copia cíclica"). Cuando des por bueno el funcionamiento elimina el comando RD, borrándolo totalmente o precediéndolo de REM para que se considere un comentario.

ME SALE ESTO:

El sistema no puede encontrar el archivo especificado.

No se puede leer el archivo: c:\Users\Daniel

0 archivo(s) copiado(s)
Presione una tecla para continuar . . .

MANDO LA IMAGEN DE REFERENCIA

QUE TODO SE REALICE EN LA MISMA CARPETA

YA ME CREA LA CARPETA CON LA FECHA SOLO FALTA QUE TODO SE PASE A LA CARPETA CON FECHA:

ASI QUEDO EL ARCHIVO DE EXCLUSIONES

SIGO AL PENDIENTE GRACIAS :)

Ya me sale yuju pero si quito la línea de excluir :(

Pero los copia, y quiero que los mueva osea los corte y ya no aparezcan en la carpeta de

C:\Users\Daniel Macias\OneDrive\PIE\SANTA

Osea eliminarlos y solo se queden en la carpeta de la fecha

Y faltaría ver por que no me hace lo de las excepciones

Te agradezco mucho la ayuda :) :) :)

Para que funcione lo de las excepciones pensé que bastaría con poner entre comillas la invocación a la variable EXCLUIR dado que el path contiene espacios. Algo así:

xcopy "*.*" "%dirfecha%\*.*" /exclude:"%excluir%"

pero parece que el parámetro /EXCLUDE no contempla esa posibilidad.

Por tanto parece que el archivo de exclusiones debería estar en un path que no contemple espacios. Podría hacerse si el archivo de exclusiones se deja en el mismo path de origen con lo que el bat sería algo así (si no se quiere copiar el propio archivo EXCLUSIONES.TXT a la carpeta de fecha debería incluirse en el propio archivo):

@echo off
set origen=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set dirfecha=%date:~0,2%%date:~3,2%%date:~6,4%
pushd %origen%
rd /s /q %dirfecha%
mkdir %dirfecha%
xcopy "*.*" "%dirfecha%\*.*" /exclude:exclusiones.txt
Popd

Y el archivo EXCLUSIONES.TXT quedaría así:

0OBSERVACIONES.xlsx
PEDIDO SANTA MARIA 25012022d.xlsx
REALIZACION PEDIDO SANTA.xlsm
Exclusiones.txt

Por otra parte el comando XCOPY no tiene opciones para mover (o yo no las he encontrado). Por tanto habría que usar otro comando como ROBOCOPY o añadir comandos de borrado de los archivos copiados. Ahora no tengo tiempo para investigar este asunto y el fin de semana tampoco voy a poder hacerlo.

Al final he tenido algún rato entre ayer y hoy y he podido investigar un poco el uso del comando ROBOCOPY (sabía de su existencia pero lo cierto es que no suelo usarlo), además de confirmar que en el XCOPY no funciona bien el /EXCLUDE cuando el path de la carpeta en la que se encuentra el archivo de exclusiones contiene algún espacio (puede verse algo de esto en https://qastack.mx/superuser/527807/how-can-i-specify-an-exclude-file-with-spaces-in-it-to-xcopy ). En todo caso el uso del XCOPY tampoco permite mover archivos en lugar de copiarlos.

Resumiendo, creo que esta nueva versión del BAT podría ajustarse a tus necesidades:

@echo off
set origen=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set dirfecha=%date:~0,2%%date:~3,2%%date:~6,4%
set excluir="0OBSERVACIONES.xlsx" "PEDIDO SANTA MARIA 25012022d.xlsx" "REALIZACION PEDIDO SANTA.xlsm"
rd /s /q "%origen%\%dirfecha%"
Robocopy "%origen%" "%origen%\%dirfecha%" /E /Z /XF %excluir% /XD %dirfecha% /MOV

Me gustaba más poder usar un archivo con las exclusiones en lugar de ponerlas "a pelo" en el propio BAT pero no parece que ROBOCOPY lo permita. Siempre se podría incluir en el BAT algo de código que genere el contenido de la variable EXCLUIR a partir de un archivo EXCLUSIONES.TXT, pero no sé si eso te interesará o no.

Como ya te dije el comando RD /S /Q de la quinta línea solo tiene sentido durante las pruebas y, teniendo en cuenta que el /MOV del ROBOCOPY borra los archivos de su ubicación original, podría ser peligroso mantener el RD y el /MOV porque podrían perderse esos archivos. Te sugiero que los copies de forma manual en otra ubicación para evitarte sustos.

Prueba y me dices.

Hola buena noche

Quedo excelente muchísimas gracias

:) :) :) :)

Solo que tengo una carpeta y también me la copia como puedo excluirla de favor, los exceles si me los excluye pero faltaría ya por ultimo eso de favor

Deduzco que la carpeta que quieres excluir de la copia es la que se llama "X". Bastaría con añadirla a la opción /XD. Quedaría así:

@echo off
set origen=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set dirfecha=%date:~0,2%%date:~3,2%%date:~6,4%
set excluir="0OBSERVACIONES.xlsx" "PEDIDO SANTA MARIA 25012022d.xlsx" "REALIZACION PEDIDO SANTA.xlsm"
rd /s /q "%origen%\%dirfecha%"
Robocopy "%origen%" "%origen%\%dirfecha%" /E /Z /XF %excluir% /XD %dirfecha% "X" /MOV

Creo que las comillas no son imprescindibles si no hay espacios en el nombre pero por si acaso mejor ponerlas.

Buenos días

Quedo excelente te agradezco mucho

Lindo Día

Me alegro. Pero se me ocurre que a lo mejor habría que hacer algo para excluir de la copia las carpetas de fecha que se vayan creando día tras día, para no tener que modificar el bat cada vez.

Por ejemplo si queremos excluir todas las subcarpetas podría hacerse así

@echo off
Setlocal EnableDelayedExpansion
set origen=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set dirfecha=%date:~0,2%%date:~3,2%%date:~6,4%
set exclarch="0OBSERVACIONES.xlsx" "PEDIDO SANTA MARIA 25012022d.xlsx" "REALIZACION PEDIDO SANTA.xlsm"
for /f "tokens=*" %%a in ('dir /ad /b "%origen%"') do set excldir="%%a" !excldir!
Robocopy "%origen%" "%origen%\%dirfecha%" /E /Z /XF %exclarch% /XD %excldir% /MOV

Super

Excelente Idea

Tengo otro problema :(

Si lo vuelvo a ejecutar por equivocación me borra los documentos de la carpeta y no me lo deja ni en papelera de reciclaje que puedo hacer por favor :)

¿Qué versión del bat te ha borrado los documentos al repetirla por error? Si te refieres a la primera del 7 de febrero el problema vendría, muy probablemente, de no haber borrado/comentado la línea del RD, de la que te hablaba el día 6 (y te recomendaba hacer una copia de los archivos para evitar sustos). Si es otra versión que ya no tiene operativo el RD no le encuentro explicación, por lo que sería bueno que me copiaras por aquí el BAT. En todo caso si no tomaste la precaución de hacer una copia antes de probar y no están en la papelera de reciclaje me temo que no vas a poder recuperar esos archivos de forma sencilla.

Por otra parte he visto un par de errores en la segunda versión del 7 de febrero (la que debe respetar las carpetas preexistentes). Esta versión los corrige:

@echo off
Setlocal EnableDelayedExpansion
set origen=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set dirfecha=%date:~0,2%%date:~3,2%%date:~6,4%
set exclarch="0OBSERVACIONES.xlsx" "PEDIDO SANTA MARIA 25012022d.xlsx" "REALIZACION PEDIDO SANTA.xlsm"
for /f "tokens=*" %%a in ('dir /ad /b "%origen%"') do set excldir="%%a" !excldir!
set excldir=%origen%\%dirfecha% !excldir!
Robocopy "%origen%" "%origen%\%dirfecha%" /E /Z /XF %exclarch% /XD !excldir! /MOV

Ya me dirás.

Esta es la version que me esta funcionando al momento:

@echo off
set origen=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set dirfecha=%date:~0,2%%date:~3,2%%date:~6,4%
set excluir="0OBSERVACIONES.ink" "00PEDIDO SANTA.xlsx" "REALIZACION PEDIDO SANTA.xlsm" "000MUEVE.bat" "0OBSERVACIONES.xlsx"
rd /s /q "%origen%\%dirfecha%"
Robocopy "%origen%" "%origen%\%dirfecha%" /E /Z /XF %excluir% /XD %dirfecha% "X" /MOV
PAUSE

Hace todo a la perfección :)

Solo es el detalle que te comentaba que si lo ejecuto de nuevo ya no recupero los archivos ni en la papelera.

Si me ayudas en mandarme el BAT y pulir eso de favor e incluir que excluya las subcarpetas

Te lo agradecería mucho de favor :)

Pues sería este:

@echo off
set origen=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set dirfecha=%date:~0,2%%date:~3,2%%date:~6,4%
set excluir="0OBSERVACIONES.ink" "00PEDIDO SANTA.xlsx" "REALIZACION PEDIDO SANTA.xlsm" "000MUEVE.bat" "0OBSERVACIONES.xlsx"
rem rd /s /q "%origen%\%dirfecha%"
Robocopy "%origen%" "%origen%\%dirfecha%" /E /Z /XF %excluir% /XD %dirfecha% "X" /MOV
PAUSE

Como puedes ver el único cambio es que he quitado el comando RD de la quinta línea (al ponerle un REM delante no se ejecuta porque se considera un comentario)

Lo pruebo y te aviso muchas gracias

¿En este bat también excluye las subcarpetas de copiarlas?

No. El bat que excluye las subcarpetas es el que te pasé antes. Ese ya no incluye el comando RD, de modo que no debe hacer ningún borrado molesto.

Se me ha ocurrido una forma mucho más sencilla de excluir subcarpetas/directorios. Es usar el comodín * junto con la opción de excluir directorios, /XD. Bastante obvio, pero como no estoy acostumbrado al ROBOCOPY ni se me ocurrió. Quedaría así:

@echo off
set origen=c:\Users\Daniel Macias\OneDrive\PIE\SANTA
set dirfecha=%date:~0,2%%date:~3,2%%date:~6,4%
set exclarch="0OBSERVACIONES.xlsx" "PEDIDO SANTA MARIA 25012022d.xlsx" "REALIZACION PEDIDO SANTA.xlsm"
robocopy "%origen%" "%origen%\%dirfecha%" /E /Z /XF %exclarch% /XD * /MOV

MUCHAS GRACIAS

Lo intentare y le aviso como me fue :)

Muy bien.

Todo funciono a la maravilla

Muchísimas Gracias

Gracias por la paciencia y su tiempo

Me alegro mucho. Ha sido una buena ocasión para "entrenarme" un poco con el ROBOCOPY.

Si necesitas alguna otra vez algo relacionado con BAT por aquí estaré, o eso espero.

Muchas gracias por la excelente atención, y claro si tengo alguna duda te escribiré :)

Primero Dios estaremos bien para la próxima

Saludos cordiales

Muy bien. No me contestes más que si lo haces me sale que tengo una pregunta pendiente de responder.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas