Programadores a mi! Ayuda con Script de Windows

Buenas foreros, estoy intentando montarme un script .cmd de windows para mover todos los archivos con extension ".mkv" a una sola carpeta, he probado con copy, move, xcopy (con diferentes atributos cada uno) y no doy con ello, el último script lo he dejado así:

@echo off
cls
set /p nombre="Introduce tu nombre..."
echo Bienvenido %nombre%, procedemos a copiar tus archivos

echo.

set /p tipo="¿Que tipo de archivos desea copiar? Introduzca su extension..."
echo Usted quiere mover los archivos del tipo ".%tipo%"

echo.
set /p origen="Introduzca la ruta de origen..."
echo La ruta de origen seleccionada ha sido: %origen%

echo.
set /p destino="Introduzca la ruta de destino..."
echo Sus archivos se copiaran en el siguiente destino: %destino%

echo.
xcopy /y %origen%\*.%tipo% %destino%\

echo.
echo Sus archivos se han copiado correctamente.
timeout /t 5

echo.
echo Gracias por usar mi script.
pause >nul


Pero nada, ni copiarse ni moverse, con este último script me da un fallo de "No se puede realizar una copia cíclica". Basicamente tengo muchas carpetas con archivos de formato .mkv y no quiero estar cortando todos a mano, simplemente un script que me busque los archivos de esa extensión, me los mueva a una carpeta de destino y fin.

Gracias de antemano y perdón si este no es el apartado correcto del foro PC para este tipo de consultas.
@foilan

Prueba con este
@echo off
cls
set /p nombre="Introduce tu nombre..."
echo Bienvenido %nombre%, procedemos a copiar tus archivos

echo.

set /p tipo="¿Que tipo de archivos desea copiar? Introduzca su extension..."
echo Usted quiere mover los archivos del tipo ".%tipo%"

echo.
set /p origen="Introduzca la ruta de origen..."
echo La ruta de origen seleccionada ha sido: %origen%

echo.
set /p destino="Introduzca la ruta de destino..."
echo Sus archivos se copiaran en el siguiente destino: %destino%

echo.
for /R "%origen%" %%x in (*.%tipo%) do @xcopy /Y /J %%x "%destino%\"

echo.
echo Sus archivos se han copiado correctamente.
timeout /t 5

echo.
echo Gracias por usar mi script.
pause >nul


el parámetro /J de xcopy es para copiar usando el buffer, esto se utiliza para archivos grandes
dexter_ escribió:@foilan

Prueba con este
@echo off
cls
set /p nombre="Introduce tu nombre..."
echo Bienvenido %nombre%, procedemos a copiar tus archivos

echo.

set /p tipo="¿Que tipo de archivos desea copiar? Introduzca su extension..."
echo Usted quiere mover los archivos del tipo ".%tipo%"

echo.
set /p origen="Introduzca la ruta de origen..."
echo La ruta de origen seleccionada ha sido: %origen%

echo.
set /p destino="Introduzca la ruta de destino..."
echo Sus archivos se copiaran en el siguiente destino: %destino%

echo.
for /R "%origen%" %%x in (*.%tipo%) do @xcopy /Y /J %%x "%destino%\"

echo.
echo Sus archivos se han copiado correctamente.
timeout /t 5

echo.
echo Gracias por usar mi script.
pause >nul


el parámetro /J de xcopy es para copiar usando el buffer, esto se utiliza para archivos grandes



Ya, el tema es que si uso xcopy al final todo el trabajo que hago no sirve de nada, porque mi intención con este script es mover archivos, no copiarlos
@foilan

@echo off
cls
set /p nombre="Introduce tu nombre..."
echo Bienvenido %nombre%, procedemos a copiar tus archivos

echo.

set /p tipo="¿Que tipo de archivos desea copiar? Introduzca su extension..."
echo Usted quiere mover los archivos del tipo ".%tipo%"

echo.
set /p origen="Introduzca la ruta de origen..."
echo La ruta de origen seleccionada ha sido: %origen%

echo.
set /p destino="Introduzca la ruta de destino..."
echo Sus archivos se copiaran en el siguiente destino: %destino%

echo.
for /R "%origen%" %%x in (*.%tipo%) do @move "%%x" "%destino%\"

echo.
echo Sus archivos se han copiado correctamente.
timeout /t 5

echo.
echo Gracias por usar mi script.
pause >nul


A ver si este te sirve
A mi me funciona el script en su primera versión, lo que me lleva a pensar que hay algún escenario, justo en el que te encuentras, donde el script es justamente donde está fallando.

¿Estás ejecutando el script como Administrador? ¿Las rutas tienen espacios? ¿Son muy largas? ¿Puedes poner un ejemplo donde te falla?

De todas formas, te he hecho algunos ajustes. Mira a ver si así te funciona:
@echo off
CD /D "%~dp0"
cls
REM set /p nombre="Introduce tu nombre..."
echo Bienvenido %USERNAME%, procedemos a mover tus archivos

echo.

ECHO ¿Que tipo de archivos desea mover? Introduzca su extension:
set /p tipo=
echo Usted quiere copiar los archivos del tipo ".%tipo%"

echo.
ECHO Introduzca la ruta de origen:
set /p origen=
echo La ruta de origen seleccionada ha sido: %origen%

echo.
ECHO Introduzca la ruta de destino:
set /p destino=
echo Sus archivos se copiaran en el siguiente destino: %destino%

echo.
move /y "%origen%\*.%tipo%" "%destino%\"

echo.
echo Sus archivos se han movido correctamente.
rem pause >nul

echo.
echo Gracias por usar mi script.
timeout /t 5
JuananBow escribió:A mi me funciona el script en su primera versión, lo que me lleva a pensar que hay algún escenario, justo en el que te encuentras, donde el script es justamente donde está fallando.

¿Estás ejecutando el script como Administrador? ¿Las rutas tienen espacios? ¿Son muy largas? ¿Puedes poner un ejemplo donde te falla?

De todas formas, te he hecho algunos ajustes. Mira a ver si así te funciona:
@echo off
CD /D "%~dp0"
cls
REM set /p nombre="Introduce tu nombre..."
echo Bienvenido %USERNAME%, procedemos a mover tus archivos

echo.

ECHO ¿Que tipo de archivos desea mover? Introduzca su extension:
set /p tipo=
echo Usted quiere copiar los archivos del tipo ".%tipo%"

echo.
ECHO Introduzca la ruta de origen:
set /p origen=
echo La ruta de origen seleccionada ha sido: %origen%

echo.
ECHO Introduzca la ruta de destino:
set /p destino=
echo Sus archivos se copiaran en el siguiente destino: %destino%

echo.
move /y "%origen%\*.%tipo%" "%destino%\"

echo.
echo Sus archivos se han movido correctamente.
rem pause >nul

echo.
echo Gracias por usar mi script.
timeout /t 5


Si no me equivoco, con este script no va a buscar en subdirectorios
Edit. en mis script ya he tenido en cuenta los espacios de los directorios por eso el uso de las " "
dexter_ escribió:
JuananBow escribió:A mi me funciona el script en su primera versión, lo que me lleva a pensar que hay algún escenario, justo en el que te encuentras, donde el script es justamente donde está fallando.

¿Estás ejecutando el script como Administrador? ¿Las rutas tienen espacios? ¿Son muy largas? ¿Puedes poner un ejemplo donde te falla?

De todas formas, te he hecho algunos ajustes. Mira a ver si así te funciona:
@echo off
CD /D "%~dp0"
cls
REM set /p nombre="Introduce tu nombre..."
echo Bienvenido %USERNAME%, procedemos a mover tus archivos

echo.

ECHO ¿Que tipo de archivos desea mover? Introduzca su extension:
set /p tipo=
echo Usted quiere copiar los archivos del tipo ".%tipo%"

echo.
ECHO Introduzca la ruta de origen:
set /p origen=
echo La ruta de origen seleccionada ha sido: %origen%

echo.
ECHO Introduzca la ruta de destino:
set /p destino=
echo Sus archivos se copiaran en el siguiente destino: %destino%

echo.
move /y "%origen%\*.%tipo%" "%destino%\"

echo.
echo Sus archivos se han movido correctamente.
rem pause >nul

echo.
echo Gracias por usar mi script.
timeout /t 5


Si no me equivoco, con este script no va a buscar en subdirectorios


Na igualmente he hecho otra versión con ciclo for tokens y ejecutando dentro dir /b con un |find ".mkv" pero tampoco hay forma
foilan escribió:
dexter_ escribió:
JuananBow escribió:A mi me funciona el script en su primera versión, lo que me lleva a pensar que hay algún escenario, justo en el que te encuentras, donde el script es justamente donde está fallando.

¿Estás ejecutando el script como Administrador? ¿Las rutas tienen espacios? ¿Son muy largas? ¿Puedes poner un ejemplo donde te falla?

De todas formas, te he hecho algunos ajustes. Mira a ver si así te funciona:
@echo off
CD /D "%~dp0"
cls
REM set /p nombre="Introduce tu nombre..."
echo Bienvenido %USERNAME%, procedemos a mover tus archivos

echo.

ECHO ¿Que tipo de archivos desea mover? Introduzca su extension:
set /p tipo=
echo Usted quiere copiar los archivos del tipo ".%tipo%"

echo.
ECHO Introduzca la ruta de origen:
set /p origen=
echo La ruta de origen seleccionada ha sido: %origen%

echo.
ECHO Introduzca la ruta de destino:
set /p destino=
echo Sus archivos se copiaran en el siguiente destino: %destino%

echo.
move /y "%origen%\*.%tipo%" "%destino%\"

echo.
echo Sus archivos se han movido correctamente.
rem pause >nul

echo.
echo Gracias por usar mi script.
timeout /t 5


Si no me equivoco, con este script no va a buscar en subdirectorios


Na igualmente he hecho otra versión con ciclo for tokens y ejecutando dentro dir /b con un |find ".mkv" pero tampoco hay forma

Yo pruebo los script que te paso y a mi si me funcionan
el ultimo que te pase movía los archivos con la extensión que le pases de la carpeta y los subdirectorios que le pasas, a la carpeta de destino, eso si la carpeta tiene que existir si no da error.

Ejem. de los parámetros ->
Nombre -> el que queiras
Extension -> mkv, txt, zip (la extensión la tienes que poner sin el .)
carpeta de origen- ->C:\Users\dexter\descargas
carpeta destino -> C:\Users\dexter\escritorio\pelis

Lo que puede dar error es si la carpeta de destino es la misma o un subdirectorio de origen

No se, que error estas teniendo y asi es dificil ajustar

Edit.
No se si es que necesitas que sea un batch por algo, pero tienes la aplicación Belvedere que creo te va a resultar bastante util
Hola @dexter_ @juananbow gracias a todos por vuestras respuestas y perdón por tardar en contestar, EOL no deja contestar tan seguido, actualizo el hilo con un script que he empezado de cero pero nada tampoco consigo que me funcione, a ver si veis el fallo porque yo no veo nada ya XD


:============================|
: Script para mover archivos |
:============================|


    @echo off
    cls
    setlocal enabledelayedexpansion

    set /p tipo="¿Que tipo de archivos desea copiar? Introduzca su extension..."
    echo Usted quiere mover los archivos de tipo ".%tipo%"

    echo.
    set /p origen="Introduzca la ruta de origen..."
    echo La ruta de origen seleccionada ha sido: %origen%

    echo.
    set /p destino="Introduzca la ruta de destino..."
    echo Sus archivos se copiaran en el siguiente destino: %destino%

    echo.
    for /f %%a in ('dir /s /b "%origen%"^|find ".%tipo%"') do (
     echo Moviendo:
     echo.
     echo %%a
     move "%%a" "%destino%"

    )

    echo.
    echo Sus archivos se han movido correctamente.
    timeout /t 5

    echo.
    echo Gracias por usar mi script.
    pause >nul
@foilan

Buenas como ya te dije los script los pruebo y a mi me funcionan, tiene que ser algo particular de tu configuración.
Que SO estas usando? que error te da?
dexter_ escribió:@foilan

Buenas como ya te dije los script los pruebo y a mi me funcionan, tiene que ser algo particular de tu configuración.
Que SO estas usando? que error te da?


Pues con este último me da error de rutas, uso Windows 10, pero es que las rutas están bien, las he cambiado 200 veces y puesto/quitado comillas, probado con otros parametros pero nada de nada, lo ejecuto como administrador también lo aclaro.
foilan escribió:
dexter_ escribió:@foilan

Buenas como ya te dije los script los pruebo y a mi me funcionan, tiene que ser algo particular de tu configuración.
Que SO estas usando? que error te da?


Pues con este último me da error de rutas, uso Windows 10, pero es que las rutas están bien, las he cambiado 200 veces y puesto/quitado comillas, probado con otros parametros pero nada de nada, lo ejecuto como administrador también lo aclaro.


Te paso un adjunto con el .bat a ver si es que se te está colando algún caracter raro.

Ejem. de los parámetros ->
Nombre -> el que quieras
Extension -> mkv, txt, zip (la extensión la tienes que poner sin el . )
carpeta de origen-> C:\Users\dexter\descargas
carpeta destino -> C:\Users\dexter\escritorio\pelis

Adjuntos

dexter_ escribió:
foilan escribió:
dexter_ escribió:@foilan

Buenas como ya te dije los script los pruebo y a mi me funcionan, tiene que ser algo particular de tu configuración.
Que SO estas usando? que error te da?


Pues con este último me da error de rutas, uso Windows 10, pero es que las rutas están bien, las he cambiado 200 veces y puesto/quitado comillas, probado con otros parametros pero nada de nada, lo ejecuto como administrador también lo aclaro.


Te paso un adjunto con el .bat a ver si es que se te está colando algún caracter raro.

Ejem. de los parámetros ->
Nombre -> el que quieras
Extension -> mkv, txt, zip (la extensión la tienes que poner sin el . )
carpeta de origen-> C:\Users\dexter\descargas
carpeta destino -> C:\Users\dexter\escritorio\pelis



Muchas gracias voy a probar y te cuento ;)
foilan escribió:Muchas gracias voy a probar y te cuento ;)


Esperando tu respuesta me hallo :cool:
13 respuestas