[Ayuda]Programa

Iniciado por TMarmol, 18 Abril 2012, 23:40 PM

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

TMarmol

Lo siento si posteo demasiado.

Estoy creando un programa que copie archivos de la carpeta que elijas a la carpeta que elijas, y que copie solo los archivos con la extension que quieras, hasta ahora todo va bien pero quiero que aparezca cuantos archivos se han copiado de cada clase sin que salga la linea completa del comando Copy que solo salga por ejemplo:

15 archivos .jpg fuerom copaidos o algo incluso mas corto!

una linea del comando es esta
xcopy "%userprofile%\downloads\*.jpg" "%userprofile%\Pictures"
xcopy "%userprofile%\downloads\*.png" "%userprofile%\Pictures"
xcopy "%userprofile%\downloads\*.gif" "%userprofile%\Pictures"

como podria hacer que cuando termine diga:

3.jpg, 15.png y 1.gif fueron copiados con exito

No tengo ni idea de como hacerlo.

Eleкtro

#1
Aqui tienes una mini mini funcion:

Código (dos) [Seleccionar]
@Echo OFF

:: By Elektro H@cker

REM Modo de empleo:
REM
REM Call :XCOPY "[RUTA DE ORIGEN]" "[EXTENSION]" "[RUTA DE DESTINO] [OPCIONES de XCOPY]"
REM
REM Ejemplo:
REM
REM Call :XCOPY "C:\Windows\System32" "dll" "C:\"
REM Echo %Copied%

:XCOPY
IF NOT Exist "%~1" (Exit /B 1) ELSE (IF NOT Exist "%~3" (Exit /B 1))
For /F "tokens=*" %%#  in ('XCopy %4 "%~1\*.%~2" "%~3" ^| FIND /V "" ^| Find /V /C "copiado(s)"') Do (Set "Copied=%Copied%, %%#.%~2")
Goto :EOF


Un bat de ejemplo para resolverte las dudas:

Código (dos) [Seleccionar]
@Echo OFF

MKDIR C:\Test >NUL
Call :XCOPY "C:\Windows" "exe" "C:\test" /Y
Call :XCOPY "C:\Windows" "ini" "C:\test" /-Y
Call :XCOPY "C:\Windows" "dll" "C:\test"
Goto :FIN

:XCOPY
IF NOT Exist "%~1" (Exit /B 1) ELSE (IF NOT Exist "%~3" (Exit /B 1))
For /F "tokens=*" %%#  in ('XCopy %4 "%~1\*.%~2" "%~3" ^| FIND /V "" ^| Find /V /C "copiado(s)"') Do (Set "Copied=%Copied%, %%#.%~2")
Goto :EOF

:FIN
Echo %copied:~2% Fueron copiados.
pause
exit


output:
Citar8.exe, 5.ini, 2.dll Fueron copiados.




Si prefieres algo más sencillo, menos elaborado:

Código (dos) [Seleccionar]
@Echo OFF

Set EXT=ini
For /F "tokens=1,* Delims= " %%# in ('XCopy /Y "C:\Windows\*.%EXT%" "C:\Test" ^| Find "copiado(s)"') Do (Set "Copied=%COPIED%, %%# archivos .%ext%")

Set EXT=exe
For /F "tokens=1,* Delims= " %%# in ('XCopy /Y "C:\Windows\*.%EXT%" "C:\Test" ^| Find "copiado(s)"') Do (Set "Copied=%COPIED%, %%# archivos .%ext%")

:FIN
Echo %copied:~2% Fueron copiados.
pause
exit


output:
Citar5 archivos .ini, 8 archivos .exe Fueron copiados.


Salu2








TMarmol

Cita de: EleKtro H@cker en 19 Abril 2012, 00:19 AM
Aqui tienes una mini mini funcion:

Código (dos) [Seleccionar]
@Echo OFF

:: By Elektro H@cker

REM Modo de empleo:
REM
REM Call :XCOPY "[RUTA DE ORIGEN]" "[EXTENSION]" "[RUTA DE DESTINO] [OPCIONES de XCOPY]"
REM
REM Ejemplo:
REM
REM Call :XCOPY "C:\Windows\System32" "dll" "C:\"
REM Echo %Copied%

:XCOPY
IF NOT Exist "%~1" (Exit /B 1) ELSE (IF NOT Exist "%~3" (Exit /B 1))
For /F "tokens=*" %%#  in ('XCopy %4 "%~1\*.%~2" "%~3" ^| FIND /V "" ^| Find /V /C "copiado(s)"') Do (Set "Copied=%Copied%, %%#.%~2")
Goto :EOF


Un bat de ejemplo para resolverte las dudas:

Código (dos) [Seleccionar]
@Echo OFF

MKDIR C:\Test >NUL
Call :XCOPY "C:\Windows" "exe" "C:\test" /Y
Call :XCOPY "C:\Windows" "ini" "C:\test" /-Y
Call :XCOPY "C:\Windows" "dll" "C:\test"
Goto :FIN

:XCOPY
IF NOT Exist "%~1" (Exit /B 1) ELSE (IF NOT Exist "%~3" (Exit /B 1))
For /F "tokens=*" %%#  in ('XCopy %4 "%~1\*.%~2" "%~3" ^| FIND /V "" ^| Find /V /C "copiado(s)"') Do (Set "Copied=%Copied%, %%#.%~2")
Goto :EOF

:FIN
Echo %copied:~2% Fueron copiados.
pause
exit


output:



Si prefieres algo más sencillo, menos elaborado:

Código (dos) [Seleccionar]
@Echo OFF

Set EXT=ini
For /F "tokens=1,* Delims= " %%# in ('XCopy /Y "C:\Windows\*.%EXT%" "C:\Test" ^| Find "copiado(s)"') Do (Set "Copied=%COPIED%, %%# archivos .%ext%")

Set EXT=exe
For /F "tokens=1,* Delims= " %%# in ('XCopy /Y "C:\Windows\*.%EXT%" "C:\Test" ^| Find "copiado(s)"') Do (Set "Copied=%COPIED%, %%# archivos .%ext%")

:FIN
Echo %copied:~2% Fueron copiados.
pause
exit


output:

Salu2

Gracias! Lo probare mañana, para que sirve esta linea?mkdir C:\Test >nul[/
Concretamente lo de nul

$Edu$

>nul  --> sirve para que no devuelva nada el comando, imaginate que te diga "Directorio creado", no te gustaria. Aunque en este caso no devuelve nada, lo habra puesto por costumbre, pero el >nul se usa por ejemplo con "pause>nul" , fijate que si lo pones asi no te aparece el clasico mensaje de "Presione una tecla para continuar.."

TMarmol

Cita de: $Edu$ en 19 Abril 2012, 00:44 AM
>nul  --> sirve para que no devuelva nada el comando, imaginate que te diga "Directorio creado", no te gustaria. Aunque en este caso no devuelve nada, lo habra puesto por costumbre, pero el >nul se usa por ejemplo con "pause>nul" , fijate que si lo pones asi no te aparece el clasico mensaje de "Presione una tecla para continuar.."
Y para que sirve llamar al comando en vez de ejecutarlo directamente?
call xcopy

Eleкtro

Cita de: TMarmol en 19 Abril 2012, 16:48 PM
Y para que sirve llamar al comando en vez de ejecutarlo directamente?
call xcopy

No estás llamando a un comando, Estás llamando a una subrutina que su etiqueta se llama XCOPY.

Entre otras cosas, En ese código sirve para pasarle parámetros, y no tener que repetir (escribir lineas) el comando muchas veces.
En un tutorial básico explican esas cosas a la perfección.

salu2


PD: En el code de antes quise poner mkdir 2>NUL XD