WinBatch - Mover archivos por año de creacion

<<>>
 
Vista:
sin imagen de perfil

Mover archivos por año de creacion

Publicado por Hernan (1 intervención) el 01/05/2024 04:27:27
Hola, tengo este codigo para poder mover archivos pdf (solo las copias que terminen en copia002/003,etc...)segun el año de creacion de cada archivo. El codigo deberia crear en el destino una carpeta con el nombre del año de creacion del pdf pero lo que esta haciendo es crear una carpeta con este nombre: "%c" y va moviendo los archivos a esa carpeta. Que podria estar fallando? Este codigo lo hice con ayuda de copilot pero no puede resover el problema que tengo.Tambien necesito que solo mueva los archivos que estan la carpeta de Origen pero que no busque en sus subcarpetas. Va el Codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
@echo on
setlocal enabledelayedexpansion
 
:: Ruta de origen y destino
set "origen=\\arbnwapl10\FTP\facturacion\Deposito_500"
set "destino=\\arbnwapl10\FTP\facturacion\Deposito_500\Copias"
 
:: Obtiene la fecha y hora actual
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "datetime=%%a"
set "datestamp=%datetime:~0,4%-%datetime:~4,2%-%datetime:~6,2%"
set "timestamp=%datetime:~8,2%-%datetime:~10,2%-%datetime:~12,2%"
 
:: Define el nombre del archivo de registro
set "logfile=C:\ReportesLog\Log_Copias_%datestamp%_%timestamp%.txt"
 
:: Inicializa el contador de archivos
set /a "counter=0"
 
:: Recorre los archivos en la carpeta origen y sus subcarpetas buscando las copias
for /r "%origen%" %%f in (*Copia002.pdf *Copia003.pdf *Copia004.pdf *Copia005.pdf) do (
 
  :: Obtiene el año del archivo
  for /r "tokens=1-3 delims=/" %%a in ('forfiles /p "%%~dpf." /m "%%~nxf" /c "cmd /c echo @fdate"') do (
    set "anio=%%c"
  )
 
  :: Crea la subcarpeta con el nombre del año si no existe
  if not exist "%destino%\!anio!" (
    mkdir "%destino%\!anio!"
  )
 
  :: Mueve el archivo a la subcarpeta del año
  robocopy "%%~dpf." "%destino%\!anio!" "%%~nxf" /MINAGE:120 /MOV /MT:6 /NP /FFT /Z /r:2 /w:2 /LOG+:"%logfile%"
 
  :: Incrementa el contador de archivos
  set /a "counter+=1"
)
 
:: Escribe el total de archivos movidos en el archivo de registro
echo Total de archivos movidos: %counter% >> "%logfile%"
 
endlocal
pause
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