Ms-Dos - Renombrar ficheros con BAT

 
Vista:
Imágen de perfil de Luis
Val: 21
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros con BAT

Publicado por Luis (9 intervenciones) el 08/10/2018 13:14:48
Tengo una serie de ficheros Excel con el nombre en este formato:

xx_xxx_ABCD_xxx_dd_mm_aaaa.xls

El caso es que con estos nombres, como es natural, se ordenan bastante mal al empezar la parte final, que contiene una fecha por el día, mes y año en lugar de al revés.

Lo que me interesaría es transformar esos nombres en:

ABC_aaaammdd.xls

Es que no tengo ni idea de los comandos BAT.
Muchas gracias por anticipado.
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 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

Renombrar ficheros con BAT

Publicado por Antoni Masana (811 intervenciones) el 09/10/2018 07:46:56
El BAT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
 
For %%a in (??_???_ABCD_???_??_??_????.xls) do call :Renombra %%~na %%~xa
goto:eof
 
:Renombra
   set Nom=%1
   set Ext=%2
   echo %Nom%%Ext%
   set dd=%Nom:~16,2%
   set mm=%Nom:~19,2%
   set aa=%Nom:~22,4%
 
   Ren %Nom%%Ext% ABC_%aa%%mm%%dd%%Ext%
   goto:EOF

Saludos.
\\//_
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 Luis
Val: 21
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros con BAT

Publicado por Luis (9 intervenciones) el 09/10/2018 13:23:58
Antoni,

Si te pasas por mis dominios tienes unas cañas aseguradas.
Muchísimas gracias por tu amable y desinteresada ayuda.
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
Val: 12
Ha aumentado su posición en 3 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros con BAT

Publicado por jquico (5 intervenciones) el 10/10/2018 19:53:17
Estoy tratando de mover varios archivos *.tar.gz => hacia carpetas que tengan "como nombre" a crear :día de semana según fecha de archivo *.tar.gz. Ejemplo.

nombre de carpeta: Lunes, martes, etc.

Gracias saludos
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

Renombrar ficheros con BAT

Publicado por Antoni Masana (811 intervenciones) el 11/10/2018 07:16:55
El MSDOS es muy malo para la gestión de fechas y algo que esta fuera de su alcance es saber a que día de la semana estamos.
Mi recomendación es que en lugar de usar un BAT cambies a Visual Basic Script, que es nativo de Windows, si prefieres algo mejor usa PERL o PYTHON entre otros.

Saludos.
\\//_
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
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

Renombrar ficheros con BAT

Publicado por Antoni Masana (811 intervenciones) el 11/10/2018 08:31:06
He encontrado esto:

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
@echo off&setlocal
call :DateToWeek %date:~6, 4% %date:~3, 2% %date:~0, 2% yn cw dw
if "%dw%" == "1" echo Lunes
if "%dw%" == "2" echo Martes
if "%dw%" == "3" echo Miercoles
if "%dw%" == "4" echo Jueves
if "%dw%" == "5" echo Viernes
if "%dw%" == "6" echo Sabado
if "%dw%" == "7" echo Domingo
goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateToWeek %yy% %mm% %dd% yy cw dw
::
:: By: Ritchie Lawrence, Updated 2002-11-20. Version 1.1
::
:: Func: Returns an ISO 8601 Week date from a calendar date.
::       For NT4/2K/XP.
::
:: Args: %1 year component to be converted, 2 or 4 digits (by val)
:: %2 month component to be converted, leading zero ok (by val)
:: %3 day of month to be converted, leading zero ok (by val)
::       %4 var to receive year, 4 digits (by ref)
::       %5 var to receive calendar week, 2 digits, 01 to 53 (by ref)
::       %6 var to receive day of week, 1 digit, 1 to 7 (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,Jd=153*m+2
set /a Jd=Jd/5+dd+y*365+y/4-y/100+y/400-32045
set /a y=yy+4798,Jp=y*365+y/4-y/100+y/400-31738,t=Jp+3,Jp=t-t%%7
set /a y=yy+4799,Jt=y*365+y/4-y/100+y/400-31738,t=Jt+3,Jt=t-t%%7
set /a y=yy+4800,Jn=y*365+y/4-y/100+y/400-31738,t=Jn+3,Jn=t-t%%7
set /a Jr=%Jp%,yn=yy-1,yn+=Jd/Jt,yn+=Jd/Jn
if %Jd% GEQ %Jn% (set /a Jr=%Jn%) else (if %Jd% GEQ %Jt% set /a Jr=%Jt%)
set /a diff=Jd-Jr,cw=diff/7+1,wd=diff%%7,wd+=1
if %cw% LSS 10 set cw=0%cw%
endlocal&set %4=%yn%&set %5=%cw%&set %6=%wd%&goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

En esta página:

https://www.todoexpertos.com/preguntas/77timf68tb77i6g4/coo-conseguir-un-batchero-que-identifique-dia-de-semana

Espero te sirva.

Saludos.
\\//_
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
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros con BAT

Publicado por j (5 intervenciones) el 11/10/2018 18:51:23
gracias por el apoyo, ahora solo me queda evaluar cuando sea el caso para cada dia y mover el archivo. gracias
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
Val: 12
Ha aumentado su posición en 3 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros con BAT

Publicado por j (5 intervenciones) el 12/10/2018 21:16:51
intente adecuar el batch para copiar automaticamente archivos de backup a carpetas por nombre se semana, pero no me salio, que puede estar pasando en el codigo, adjunto.

Explico: intento con un for evaluar los archivos tipo *gz; luego obtengo el nombre del dia; posteriormente segun el nombre del dia que resulte se copiara o creara la carpeta destino.
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
Val: 12
Ha aumentado su posición en 3 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros con BAT

Publicado por j (5 intervenciones) el 12/10/2018 21:25:21
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
44
45
46
47
48
@echo on
cls
set "source=E:\"
set "targetRoot=E:\"
 
FOR %%x in (e:\*.gz) DO (Set vari=%%~tx
set var2=%vari:~0,2%.%vari:~3,2%.%vari:~6,4%
echo %var2%)
 
call :DateToWeek %var2:~6, 4% %var2:~3, 2% %var2:~0, 2% yn cw dw
if "%dw%" == "1" echo set dia=Lunes
if "%dw%" == "2" echo set dia=Martes
if "%dw%" == "3" echo set dia=Miercoles
if "%dw%" == "4" echo set dia=Jueves
if "%dw%" == "5" echo set dia=Viernes
if "%dw%" == "6" echo set dia=Sabado
if "%dw%" == "7" echo set dia=Domingo
 
echo "%dia%"
goto :procesa
goto :EOF
 
:procesa
 (
    if not exist "%dia%\%%C" mkdir "%dia%\%%C"is
    if not exist "%dia%\%%C\%%C-%%B" mkdir "%dia%\%%C\%%C-%%B"
    cp "%%~fF" "%dia%\%%C\%%C-%%B"
  )
echo "Proceso Finalizado Lunes ...<presione>"
pause>nul
exit
 
:DateToWeek %yy% %mm% %dd% yy cw dw
 
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,Jd=153*m+2
set /a Jd=Jd/5+dd+y*365+y/4-y/100+y/400-32045
set /a y=yy+4798,Jp=y*365+y/4-y/100+y/400-31738,t=Jp+3,Jp=t-t%%7
set /a y=yy+4799,Jt=y*365+y/4-y/100+y/400-31738,t=Jt+3,Jt=t-t%%7
set /a y=yy+4800,Jn=y*365+y/4-y/100+y/400-31738,t=Jn+3,Jn=t-t%%7
set /a Jr=%Jp%,yn=yy-1,yn+=Jd/Jt,yn+=Jd/Jn
if %Jd% GEQ %Jn% (set /a Jr=%Jn%) else (if %Jd% GEQ %Jt% set /a Jr=%Jt%)
set /a diff=Jd-Jr,cw=diff/7+1,wd=diff%%7,wd+=1
if %cw% LSS 10 set cw=0%cw%
endlocal&set %4=%yn%&set %5=%cw%&set %6=%wd%& 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 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

Renombrar ficheros con BAT

Publicado por Antoni Masana (811 intervenciones) el 13/10/2018 13:10:52
En este trozo de código no están definidas la variable que te remarco en negrita:

1
2
3
4
5
6
:procesa
 (
    if not exist "%dia%\%%C" mkdir "%dia%\%%C"is
    if not exist "%dia%\%%C\%%C-%%B" mkdir "%dia%\%%C\%%C-%%B"
    cp "%%~fF" ""%dia%\%%C\%%C-%%B"
  )


Te rehago las estructura del BAT.

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
44
45
46
47
48
49
50
51
52
@echo on
cls
set Origen=E:\
set Destino=E:\
 
FOR %%x IN (e:\*.gz) DO Call Procesa %%x %%~tx
echo.
echo Proceso Finalizado Lunes ...^<presione^>
pause>nul
goto :EOF
 
 
Procesa
    set File=%1
    set Fecha=%2
    set DD=%Fecha:~0,2%
    set MM=%Fecha:~3,2%
    set AA=%Fecha:~6,4%
 
    call :DateToWeek %aa% %mm% %dd% yn cw dw
 
    if "%dw%" == "1" echo set dia=Lunes
    if "%dw%" == "2" echo set dia=Martes
    if "%dw%" == "3" echo set dia=Miercoles
    if "%dw%" == "4" echo set dia=Jueves
    if "%dw%" == "5" echo set dia=Viernes
    if "%dw%" == "6" echo set dia=Sabado
    if "%dw%" == "7" echo set dia=Domingo
 
    :---- Nombre del Fichero %File%
    :     Fecha del fichero  %Fecha%
    :     Dia de la semana   %Dia%
 
    if not exist "%Destino%%dia%\nul"  MD "%Destino%%dia%"
    COPY "%Origen%%File%" "%Destino%%dia%"
    goto :EOF
 
:DateToWeek %yy% %mm% %dd% yy cw dw
    setlocal ENABLEEXTENSIONS
    set yy=%1&set mm=%2&set dd=%3
    if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
    set /a dd=100%dd%%%100,mm=100%mm%%%100
    set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,Jd=153*m+2
    set /a Jd=Jd/5+dd+y*365+y/4-y/100+y/400-32045
    set /a y=yy+4798,Jp=y*365+y/4-y/100+y/400-31738,t=Jp+3,Jp=t-t%%7
    set /a y=yy+4799,Jt=y*365+y/4-y/100+y/400-31738,t=Jt+3,Jt=t-t%%7
    set /a y=yy+4800,Jn=y*365+y/4-y/100+y/400-31738,t=Jn+3,Jn=t-t%%7
    set /a Jr=%Jp%,yn=yy-1,yn+=Jd/Jt,yn+=Jd/Jn
    if %Jd% GEQ %Jn% (set /a Jr=%Jn%) else (if %Jd% GEQ %Jt% set /a Jr=%Jt%)
    set /a diff=Jd-Jr,cw=diff/7+1,wd=diff%%7,wd+=1
    if %cw% LSS 10 set cw=0%cw%
    endlocal&set %4=%yn%&set %5=%cw%&set %6=%wd%& goto :EOF

saludo.
\\//_
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
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros con BAT

Publicado por j (5 intervenciones) el 15/10/2018 21:59:47
Muchas Gracias Antoni Masana, ya concrete mi proyecto. Con algunos ajuste que hice adicionalmente.
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