Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Mendozak47 en 7 Febrero 2018, 20:14 pm



Título: [CMD] script copiar y renombrar varios ficheros
Publicado por: Mendozak47 en 7 Febrero 2018, 20:14 pm
Muy buenas a todos! Soy nuevo por aqui y la verdad es que no se como no me he registrado, soy un apasionado de la tecnologia y la informatica en especial. :xD

Bueno, al grano.

Estoy intentado hacer un script sencillo que me coja varios ficheros con diferentes formatos (todos ellos contienen el nombre de mi maquina) y quiero copiar esos ficheros en otra parte con su nombre y formato original añadiendoles la fecha de cuando se realizo esa copia:

Código:
copy C:\ProgramData\MySQL\%computername%* C:\Copias\%date:~-4,4%-%date:~-7,2%-%date:~-10,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%

Pero solo consigo que me copie todos los ficheros en uno solo y sin ningun formato claro. A ver si podeis echarme una mano e indicarme como podria hacerlo. Un saludo!


Título: Re: [CMD] script copiar y renombrar varios ficheros
Publicado por: Eleкtro en 7 Febrero 2018, 22:21 pm
solo consigo que me copie todos los ficheros en uno solo

...por supuesto, estás describiendo precisamente como funciona el comando Copy:   copiar "archivo(s) de origen" a "archivo o directorio destino".

El comando Copy no acepta ningún argumento que te permita insertar un formato de texto al inicio del nombre de cada archivo (de hecho es un poco absurda la idea en la forma que la has planteado, puesto que pretendes que eso suceda sin más, sin darle ninguna indicación especial al comando Copy para que sepa que le estás pidiendo hacer, ni donde insertar el texto si al principio o al final del nombre, no se si me entiendes, no tiene sentido hacer eso), el comando Copy se limita a copiar los archivos encontrados, al destino especificado.

Para hacer lo que pides, necesitas utilizar un búcle de tipo FOR, o FOR /R si quieres realizar una búsqueda recursiva de los archivos. En el bloque de código del FOR renombrarías y copiarias cada archivo, uno a uno.

Te muestro un ejemplo completo:

Código:
@Echo OFF & (CHCP 1252)1>Nul
SetLocal EnableDelayedExpansion

Set "stringFormat=%date:~-4,4%-%date:~-7,2%-%date:~-10,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%"

FOR %%# IN (".\%COMPUTERNAME%*.*") DO (
Set "filename=%stringFormat% %%~n#"
Set "fullpath=%%~dp#!filename!%%~x#"
(Copy /Y "%%~f#" "!fullpath!")1>NUL
Echo:"%%~nx#" -^> "!filename!%%~x#"
)

Pause
Exit /B 0

Saludos!