Несколько месяцев назад я создал пакетную программу на Windows 7. Ее основная цель — организовать то, что я загружаю, в разные папки в библиотеках на основе типа файла, а затем открыть Windows Media Player (чтобы к моим медиафайлам можно было получить доступ с моего Xbox360). После обновления до Windows 10 пакетный файл полностью перестал работать — вместо перемещения файлов он только выдает ошибки типа access is denied
. Хотя структура файла осталась нетронутой. Код выглядит следующим образом.
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
Я на 99% уверен, что это какая-то синтаксическая ошибка, но я не уверен, как ее исправить или правильно ли я это делаю. EDIT: Это изображение ошибки, которую я получаю:
решение1
Предполагая, что вы перемещаете файлы из папки «Загрузки», я бы записал это так:
@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
циклы for /r
по всем файлам в каталоге - это кажется излишним, когда у вас есть только один тип видеофайла, но вы можете видеть, как изображения обрабатываются одной строкой; вы можете сделать то же самое для других типов видео по мере необходимости. Я разнес все по своим личным предпочтениям, и по какой-то причине мне кажется, что вы оцените чувство одобрения, поэтому я потратил на это больше времени, чем на написание кода - поскольку у меня действительно хорошее чувство приоритета. Я всегда предпочитаю переменные, когда они могут очистить все и избавить вас от необходимости менять пути в нескольких разных строках. %USERPROFILE%
Переменная окружения также является лучшей практикой, если вы работаете в профиле, который ваш скрипт изменяет - что вы и делаете. Обратите внимание, что с %USERPROFILE%
, если вы запускаете этот скрипт как администратор из учетной записи, в которой нет администратора, он будет работать в/изменять вместо этого профиль пользователя администратора.
Также обратите внимание, что расширения файлов не чувствительны к регистру, поэтому я удалил .PNG
.
решение2
Проблема заключается в среде каталога, в которой запущен ваш cmd-скрипт.
Он работает вc:\Windows\System32
То есть он пытается переместить системные файлы вместо файлов из ваших загрузок.
Измените скрипт так, чтобы он явно содержал путь к папке загрузки, и все должно работать нормально.
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
Хотя на самом деле вам следует использовать переменную профиля пользователя вместо пути с обеих сторон, чтобы обеспечить будущее.