Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: enrique342 en 25 Julio 2016, 21:11 pm



Título: Duda con archivos
Publicado por: enrique342 en 25 Julio 2016, 21:11 pm
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??

(https://s32.postimg.org/4trcd9ukl/Capture.png)

ejemplo

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


Título: Re: Duda con archivos
Publicado por: [Arg] $triker; en 29 Julio 2016, 03:44 am
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.


Título: Re: Duda con archivos
Publicado por: Eleкtro en 29 Julio 2016, 05:04 am
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:
Código:
@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:
Código:
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


Título: Re: Duda con archivos
Publicado por: enrique342 en 29 Julio 2016, 19:22 pm
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?


Título: Re: Duda con archivos
Publicado por: Eleкtro en 29 Julio 2016, 21:29 pm
hay manera que se pueda hacer con todos los archivos no solo con pdf

Reemplaza esto:
Citar
Código:
For %%f In ("*.pdf")

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



y 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:
Citar
Código:
Set "WorkindDir=C:\documentos\"

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

Saludos