Я пишу короткую пакетную программу для перемещения нескольких ярлыков.
Проблема в том, что Windows выдает сообщение «Не удается найти указанный файл».
Я полагаю, это происходит потому, что он либо считается системным файлом (например, учетная запись пользователя управляет «системой» на уровне «мелкого» уровня), либо он скрыт, хотя вам не нужно dir /a
отображать его в списке каталогов.
Что мне нужно здесь изменить? Все имена файлов/пути правильные, так как я скопировал их напрямую из проводника Windows.
cd C:\ProgramData\Microsoft\Windows\Start Menu\Programs\System
mkdir Settings
cd C:\ProgramData\Microsoft\Windows\Start Menu
dir
move "Default Programs.lnk" "C:\ProgramData\Microsoft\Windows\Start Menu\System\Settings"
pause
решение1
Решение
Проблема кроется в следующей строке кода:
move "Default Programs.lnk" "C:\ProgramData\Microsoft\Windows\Start Menu\System\Settings"
Как указал @Scott, путь назначения неверный. В частности:
Start Menu\System
Эту часть следует читать так:
Start Menu\Programs\System
Замечания
Даже если вам удалось решить проблему, есть и другие вещи, о которых стоит упомянуть.
Изменить текущую папку
cd C:\ProgramData\Microsoft\Windows\Start Menu\Programs\System
Приведенные выше команды не будут работать так, как вы, вероятно, ожидаете, если вы находитесь на диске, который не является C:
:
D:\>cd C:\ProgramData\Microsoft\Windows\Start Menu\Programs\System
D:\>mkdir Settings
В приведенном выше примере Settings
папка будет создана в корне диска D:
. Чтобы этого избежать, используйте /d
параметр:
cd /d C:\ProgramData\Microsoft\Windows\Start Menu\Programs\System
Команда cd
не считает пробелы разделителями, если включены расширения команд (по умолчанию они включены). В любом случае, лучше использовать кавычки:
cd /d "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\System"
Хотя папка может C:
вообще не храниться на диске. Вместо того, чтобы жестко кодировать полный путь, вы можете использовать%ProgramData%
переменная окружениякоторая была представлена в Windows Vista:
cd /d "%programdata%\Microsoft\Windows\Start Menu\Programs\System"
В более ранних операционных системах вместо этого вы бы использовали %AllUsersProfile%
. Имена переменных не чувствительны к регистру.
Создать папки
mkdir Settings
Чтобы сэкономить время на вводе текста, вы можете использовать md
:
md Settings
В отличие от cd
команды, mkdir
и md
считать пробелы разделителями. Допустим, вы запускаете эту команду:
md Some settings
В этом случае создаются две папки: Some
и settings
. Если вы собираетесь создать одну папку с именем, Some settings
вам нужно использовать кавычки. Для единообразия я рекомендую всегда использовать кавычки; даже если они не обязательны:
md "Settings"
Вы также можете указать полный путь, например так:
md "%programdata%\Microsoft\Windows\Start Menu\Programs\System\Settings"
Подпапки System
и Settings
обычно не существуют, и обе создаются за один раз.
дальнейшее чтение
решение2
Всегда заключайте пути в кавычки. Пути, содержащие пробелы в имени, должны быть заключены в кавычки.
использовать это :
cd "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\System"
mkdir Settings
cd "C:\ProgramData\Microsoft\Windows\Start Menu"
dir
move "Default Programs.lnk" "C:\ProgramData\Microsoft\Windows\Start Menu\System\Settings"
pause