Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: GORSO en 27 Marzo 2009, 20:29 PM

Título: Copiar un archivo al interior de todas las carpetas
Publicado por: GORSO en 27 Marzo 2009, 20:29 PM
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. ;-)
Título: Re: Copiar un archivo al interior de todas las carpetas
Publicado por: 0x0309 en 27 Marzo 2009, 21:29 PM
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

Título: Re: Copiar un archivo al interior de todas las carpetas
Publicado por: GORSO en 27 Marzo 2009, 22:41 PM
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
Título: Re: Copiar un archivo al interior de todas las carpetas
Publicado por: 0x0309 en 27 Marzo 2009, 23:23 PM

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.
Título: Re: Copiar un archivo al interior de todas las carpetas
Publicado por: GORSO en 28 Marzo 2009, 01:08 AM
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!!!
Título: Re: Copiar un archivo al interior de todas las carpetas
Publicado por: netoreto en 11 Julio 2011, 10:40 AM
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
Título: Re: Copiar un archivo al interior de todas las carpetas
Publicado por: SuperDraco en 11 Julio 2011, 11:55 AM
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.
Título: Re: Copiar un archivo al interior de todas las carpetas
Publicado por: netoreto en 11 Julio 2011, 14:05 PM
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.
Título: Re: Copiar un archivo al interior de todas las carpetas
Publicado por: leogtz en 11 Julio 2011, 19:29 PM
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í.