![El archivo por lotes no mueve los archivos correctamente](https://rvso.com/image/1595540/El%20archivo%20por%20lotes%20no%20mueve%20los%20archivos%20correctamente.png)
Creé un programa por lotes en Windows 7 hace unos meses. Su propósito básico es organizar las cosas que descargo en diferentes carpetas de las bibliotecas, según el tipo de archivo, luego abrir Windows Media Player (para que mi Xbox360 pueda acceder a mis medios). Después de actualizar a Windows 10, el archivo por lotes dejó de funcionar por completo; en lugar de mover archivos, todo lo que hace es escupir errores que dicen access is denied
. Aunque la estructura del archivo no se ha modificado. El código es el siguiente.
echo Organizing Your Videos . . .
move *.mp4 C:\Users\Devon\Videos
echo Your Videos have been Organized!
echo Organizing Your Images . . .
move *.jpg C:\Users\Devon\Pictures\
move *.bmp C:\Users\Devon\Pictures\
move *.gif C:\Users\Devon\Pictures\
move *.png C:\Users\Devon\Pictures\
move *.PNG C:\Users\Devon\Pictures\
echo Your images Have Been Organized!
echo ORGANIZATION PROTOCOL COMPLETE!!!
echo Starting Windows Media Player ...
echo Waiting 5 Seconds ...
timeout 5
start wmplayer.exe
Estoy 99% seguro de que se trata de algún tipo de error de sintaxis, pero no estoy seguro de cómo solucionarlo o si lo estoy haciendo bien. EDITAR: Esta es una imagen del error que recibo:
Respuesta1
Suponiendo que estás moviendo archivos desde tu carpeta de Descargas, lo escribiría así:
@echo off
set "dwn=%USERPROFILE%\Downloads"
set "pic=%USERPROFILE%\Pictures"
set "vid=%USERPROFILE%\Videos"
echo Organizing Your Videos . . .
for /r "%dwn%" %%A in (*.mp4) do (move /y "%%A" "%vid%" >nul)
echo.
echo Your Videos have been Organized!
echo.
echo Organizing Your Images . . .
for /r "%dwn%" %%B in (*.jpg *.bmp *.gif *.png) do (move /y "%%B" "%pic%" >nul)
echo.
echo Your Images have been Organized!
echo.
echo _
echo /(^|
echo ( :
echo __\ \ _____
echo (____) `^|
echo (____)^| ^|
echo (____).__^|
echo (___)__.^|_____
echo.
echo ORGANIZATION PROTOCOL COMPLETE!!!
echo.
echo Starting Windows Media Player . . .
echo.
echo Waiting 5 seconds . . .
timeout 5 >nul
start wmplayer.exe
recorre for /r
todos los archivos en un directorio; parece excesivo cuando solo tienes un tipo de archivo de video, pero puedes ver cómo las imágenes se manejan en una línea; Puede hacer lo mismo con otros tipos de videos según sea necesario. Espacié las cosas según mis preferencias personales y, por alguna razón, siento que apreciarías el toque de tener el visto bueno, así que dediqué más tiempo a eso que a escribir el código, ya que tengo un muy buen sentido de prioridad. Siempre prefiero las variables cuando pueden limpiar las cosas y evitar que tengas que cambiar rutas en varias líneas diferentes. La %USERPROFILE%
variable de entorno también es una buena práctica si está trabajando dentro del perfil que está modificando su secuencia de comandos, lo cual es así. Tenga en cuenta que con %USERPROFILE%
, si ejecuta este script como administrador desde una cuenta que no tiene administrador, funcionará/modificará el perfil de usuario del administrador.
También tenga en cuenta que las extensiones de archivo no distinguen entre mayúsculas y minúsculas, por lo que eliminé el archivo .PNG
.
Respuesta2
El problema es el entorno de directorio en el que se ejecuta su script cmd.
esta corriendo enc:\Windows\System32
Entonces está intentando mover archivos del sistema en lugar de archivos de sus descargas.
Cambie el script para que tenga explícitamente la ruta a su carpeta de descarga y debería funcionar bien.
echo Organizing Your Videos . . .
move C:\Users\Devon\Downloads\*.mp4 C:\Users\Devon\Videos
echo Your Videos have been Organized!
echo Organizing Your Images . . .
move C:\Users\Devon\Downloads\*.jpg C:\Users\Devon\Pictures\
move C:\Users\Devon\Downloads\*.bmp C:\Users\Devon\Pictures\
move C:\Users\Devon\Downloads\*.gif C:\Users\Devon\Pictures\
move C:\Users\Devon\Downloads\*.png C:\Users\Devon\Pictures\
move C:\Users\Devon\Downloads\*.PNG C:\Users\Devon\Pictures\
echo Your images Have Been Organized!
echo ORGANIZATION PROTOCOL COMPLETE!!!
echo Starting Windows Media Player ...
echo Waiting 5 Seconds ...
timeout 5
start wmplayer.exe
Aunque realmente deberías usar la variable Perfil de usuario en lugar de la ruta en ambos lados para estar preparado para el futuro.