Duda con archivos

Iniciado por enrique342, 25 Julio 2016, 21:11 PM

0 Miembros y 1 Visitante están viendo este tema.

enrique342

Hola soy nuevo en el foro, y tengo una gran duda,

Habrá alguna manera de poder renombrar con un BATCH los archivos (PDF) y poner al principio la primera palabra de la carpeta donde se encuentran?, así mismo hacer eso con las sub-carpetas??



ejemplo

MALDONADO A-B1-27 1-03-0034.pdf

[Arg] $triker;

Puede ser que algún animal de por acá te lo resuelva, pero Batch no es muy hábil leyendo datos y menos haciendo control flow. Con un poco de suerte, te lo hacen en Ruby o Python o algo así. Suerte, de todas maneras.
8Noobs - Comunidad para todos y todas, sin importar sus conocimientos en informática.

--> Unirse a 8Noobs <--

Eleкtro

#2
Batch no es para nada lo más apropiado como ya te han indicado, yo te sugiero hacerlo en VBS para no depender de intérpretes de terceros, pero bueno, suponiendo que no tengas conocimientos en otro lenguaje superior a Batch entonces puedes llevarlo a cabo de la siguiente manera:
@Echo Off & SetLocal EnableDelayedExpansion

Set "WorkindDir=C:\documentos\"
PUSHD "%WorkindDir%"

For /D /R %%d In ("*") Do (
   Echo:Folder: "%%~fd"
   PUSHD "%%~fd"
   Echo:---------------
   Echo+
   For %%f In ("*.pdf") DO (
       Call :GetFirstWord "%%~nd"
       Echo:Old: "%%~ff"
       Echo:New: "%%~dpf!WORD! %%~nxf"
       Echo+
       Rename "%%~ff" "!WORD! %%~nxf"
   )
)

Pause & Exit /B 0

:GetFirstWord
For %%w in (%~1) Do (
   Set "WORD=%%~w"
   GoTo:EOF
)


Asegúrate de que los nombres de carpetas no contengan los siguientes caracteres reservados para el lenguaje: ( ) [ ] % & ^

Resultado de ejecución:
Folder: "C:\test\pepe manolo ibiza"
---------------

Old: "C:\test\pepe manolo ibiza\doc 1.pdf"
New: "C:\test\pepe manolo ibiza\pepe doc 1.pdf"

Old: "C:\test\pepe manolo ibiza\doc 2.pdf"
New: "C:\test\pepe manolo ibiza\pepe doc 2.pdf"

Old: "C:\test\pepe manolo ibiza\doc 3.pdf"
New: "C:\test\pepe manolo ibiza\pepe doc 3.pdf"

Old: "C:\test\pepe manolo ibiza\pepe doc 1.pdf"
New: "C:\test\pepe manolo ibiza\pepe pepe doc 1.pdf"

Folder: "C:\test\pepe manolo ibiza\AAA BBB"
---------------

Old: "C:\test\pepe manolo ibiza\AAA BBB\doc 1.pdf"
New: "C:\test\pepe manolo ibiza\AAA BBB\AAA doc 1.pdf"

Old: "C:\test\pepe manolo ibiza\AAA BBB\doc 2.pdf"
New: "C:\test\pepe manolo ibiza\AAA BBB\AAA doc 2.pdf"

Old: "C:\test\pepe manolo ibiza\AAA BBB\doc 3.pdf"
New: "C:\test\pepe manolo ibiza\AAA BBB\AAA doc 3.pdf"

Presione una tecla para continuar . . .


Saludos








enrique342

Muchas gracias Elektro, solo una duda mas, hay manera que se pueda hacer con todos los archivos no solo con pdf y dos, que pueda hacerlo con las subcarpetas dentro de cada usuario?

Eleкtro

Cita de: enrique342 en 29 Julio 2016, 19:22 PMhay manera que se pueda hacer con todos los archivos no solo con pdf

Reemplaza esto:
CitarFor %%f In ("*.pdf")

Por esto otro:
For %%f In ("*.*")




Cita de: enrique342 en 29 Julio 2016, 19:22 PMy dos, que pueda hacerlo con las subcarpetas dentro de cada usuario?

El código que publiqué teoricamente ya es capaz de recorrer todos los subdirectorios (visibles) del directorio principal de trabajo, el cual está definido en la variable:
CitarSet "WorkindDir=C:\documentos\"

...¿encuentras algun problema con la recursión de carpetas?

Saludos