Arquivo em lote não move arquivos corretamente

Arquivo em lote não move arquivos corretamente

Criei um programa em lote no Windows 7 há alguns meses. Seu objetivo básico é organizar os itens que baixei em diferentes pastas nas bibliotecas, com base no tipo de arquivo, e depois abrir o Windows Media Player (para que minha mídia possa ser acessada pelo meu Xbox360). Após a atualização para o Windows 10, o arquivo em lote parou completamente de funcionar - em vez de mover arquivos, tudo o que ele faz é gerar erros dizendo access is denied. Mesmo que a estrutura do arquivo tenha permanecido intacta. O código é o seguinte.

   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

Tenho 99% de certeza de que é algum tipo de erro de sintaxe, mas não sei como corrigi-lo ou se estou fazendo certo. EDIT: Esta é uma imagem do erro que estou recebendo:

Responder1

Supondo que você esteja movendo arquivos da pasta Downloads, eu escreveria assim:

@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

o for /rloop por todos os arquivos em um diretório - parece excessivo quando você tem apenas um tipo de arquivo de vídeo, mas você pode ver como as imagens são tratadas por uma linha; você pode fazer o mesmo para outros tipos de vídeo, conforme necessário. Separei as coisas de acordo com minha preferência pessoal e, por algum motivo, sinto que você apreciaria o talento de ter um sinal de positivo, então passei mais tempo nisso do que escrevendo o código - já que tenho um bom senso de prioridade. Eu sempre prefiro variáveis ​​quando elas podem limpar as coisas e evitar que você tenha que mudar de caminho em diversas linhas diferentes. A %USERPROFILE%variável de ambiente também é uma prática recomendada se você estiver trabalhando no perfil que seu script está modificando - o que você está fazendo. Observe que com %USERPROFILE%, se você executar este script como administrador a partir de uma conta que não possui administrador, ele funcionará/modificará o perfil de usuário do administrador.

Observe também que as extensões de arquivo não diferenciam maiúsculas de minúsculas, então removi a extensão .PNG.

Responder2

O problema é o ambiente de diretório em que seu script cmd está sendo executado.

Está funcionandoc:\Windows\System32

Então, ele está tentando mover arquivos do sistema em vez de arquivos dos seus downloads.

Altere o script para ter explicitamente o caminho para sua pasta de download e deve funcionar perfeitamente

 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

Embora você realmente deva usar a variável de perfil do usuário no lugar do caminho em ambos os lados para estar preparado para o futuro

informação relacionada