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.
Aqui tienes una mini mini funcion:
@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:
@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:
@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
Cita de: EleKtro H@cker en 19 Abril 2012, 00:19 AM
Aqui tienes una mini mini funcion:
@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:
@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:
@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
>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.."
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
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