Copiar un archivo al interior de todas las carpetas

Iniciado por GORSO, 27 Marzo 2009, 20:29 PM

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

GORSO

Hola, querria saber si me podríais ayudar a crear un código cmd o for para la siguiente funcion:

Tengo una carpeta llamada proyecto; dentro de esa tengo 2 carpetas llamadas a y b; dentro de la carpeta a, tengo un archivo llamado leeme.txt con atributos; dentro de la carpeta b tengo un monton de carpetas.
Ejemplo:

Proyecto
carpeta a            carpeta b
         leeme.txt            carpetas ba,ce, to


Pues lo que qioero es hacer un bat, que al ejecutarlo, copie el leeme.txt al interior de las carpetas del la carpeta b, osea, en el ejemplo, a las carpetas ba, ce, to etc...
Eso si, mediante variables o algo tipo: copy leeme.txt ..\b\todaslascarpetasqueempiezenpor a, b, c, d..... pero al dar con una carpeta que no existe, que no le cree, sno, me haria un churro de carpetas :s
Existe algo para hacer eso?
Gracias de antemano. ;-)

0x0309

#1
Mira no tengo ganas de ensayar batch pero creo que algo así serviría:

setlocal enableextensions
set directorio=c:\Proyecto
pushd %directorio%
for /r /d %%a in (.\b) do copy "%directorio%\a\leeme.txt" .\
popd
endlocal


GORSO

No me funciona, solo pega el readme en la carpeta de proyecto nada mas.
Y el comando "c:\proye...." no lo puedo utilizar, ya que esta en un  dispositivo de almacenamiento. tendria que ser a raiz del sitio, tipo ".\" o "..\" :-(

Que le pasa a esto, que no me deja postear= lol

0x0309


setlocal enableextensions
for /f %%a in (".") do set directorio=%%~fa\
pushd "%directorio%\b"
for /r /d %%a in (.) do copy /y "%directorio%\a\leeme.txt" "%%a"
popd
endlocal
pause


el bat debe encontrarse en la carpeta Proyecto.

GORSO

Wow, xD funciona!!! al menos al 50% xD
Copia el readme a todas las carpetas seeeee ;-) Graciasssss
Lo que pasa es que tiene el otro 50% :-\ que lo copia tambien a las subcarpetas, auque no ocupa mucho pero weno, pero si mantubiera los atributos seria ya la caña!!
He intentado cambiar el "copy /y" por "attrib +r" pero no se los cambia :-\

Si sabes como darle a los archivos estos atributos, o algo........

De todas maneras, gracias, es un buen trabajo, me quitaste mucho de encima, gracias man!!!

netoreto

buenas!
sé que ha pasado tiempo, pero igual andáis por ahí...
¿se podría copiar ese txt sólo a  las carpetas que estén vacías?
por ahí he encontrado esto:

for /f «usebackq» %d in («dir /ad/b/s | sort /R») do rd «%d»

para eliminar todas las carpetas vacías, he intentado un "mix", pero nada de nada, es que no tengo ni idea

mil gracias

SuperDraco

hola, deberías haber creado un nuevo tema con tu pregunta, y no revivir uno del año 2009...

Si no tienes ni idea, vas a tener que aprender un poquito, pero no te asustes, es un poquito solo.

Mezcla vbs + batch.

Con un vbs descartas las carpetas que no están vacías, y luego el resultado, con un FOR en batch, copias el texto a las carpetas que están vacías.






"Comprobar_Carpetas_vacias.vbs"


Código (vb) [Seleccionar]
Dim objFileSystem, objTheFolder
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objTheFolder = objFileSystem.GetFolder(wscript.arguments(0))

If objTheFolder.size > 1 then
wscript.quit(0)
else
wscript.quit(1)
end if



Si la salida es 0, la carpeta está ocupada.
Si la salida es 1, la carpeta está vacía.




Una forma de usar el vbs para tu propósito sería así:



Código (dos) [Seleccionar]
@echo off

REM by PiToLoKo
REM Visita Foro.ElHacker.Net

:Carpetas vacias
For /F "Tokens=*" %%a in ('dir /B /S /A:D "LA_RUTA_DEL_DIRECTORIO"') do (
set folder=%%a
call :Comprobar carpeta)



:Comprobar carpeta
wscript "Comprobar_Carpetas_vacias.vbs" "%folder%"

If %errorlevel% EQU 0 (
goto:eof
) ELSE (
copy TUTEXTO.txt "%folder%\"
goto:eof
)



Saludos.
No he vuelto, solo estoy de paso.

netoreto

ayy
gracias por la prontísima respuesta,
y perdón por revivir algo tan antiguo, la verdad es que me resulta tan útil esto de rellenar directorios vacíos, que no entiendo cómo nadie ha hecho nada antes igual...
mañana lo pruebo, que se me acaba la hora del curro por hoy,

gracias otra vez,
N.

leogtz

Si se quiere hacer en batch totalmente bastaría con entrar en cada directorio, contar los archivos y si son iguales a 0 que se copie ahí.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com