В чем причина сообщения об ошибке Система не может найти указанный путь?

У меня есть папка run в папке system32. Когда я запускаю cmd из Total Commander, открывая окно командной строки с C:\Users\admin в качестве текущего каталога и хочу перейти в эту папку, выводится следующее сообщение об ошибке:

Система не может найти указанный путь.

Когда я открываю cmd прямо в папке run, он работает отлично. Почему?

Окно командной строки при открытии в C:\Windows\System32\run:

C:\Windows\System32\run>cd..

C:\Windows\System32>cd run

C:\Windows\System32\run>

Окно командной строки при простом запуске cmd:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Všetky práva vyhradené.

C:\Users\admin>cd..

C:\Users>cd..

C:\>cd windows

C:\Windows>cd system32

C:\Windows\System32>cd run
Systém nemôže nájst’ zadanú cestu.

person Mi1anovic    schedule 10.11.2015    source источник


Ответы (3)


В Windows x64 есть не только 1 %SystemRoot%\System32. Таких каталогов 2.

Настоящая директория %SystemRoot%\System32 предназначена для 64-битных приложений. Этот каталог содержит 64-битный файл cmd.exe.

Но есть еще %SystemRoot%\SysWOW64 для 32-битных приложений. Этот каталог используется, если 32-разрядное приложение обращается к %SystemRoot%\System32. Он содержит 32-битный cmd.exe.

32-разрядные приложения могут обращаться к %SystemRoot%\System32 для 64-разрядных приложений, используя псевдоним %SystemRoot%\Sysnative в пути.

Дополнительные сведения см. В документации Microsoft о перенаправителе файловой системы < / а>.

Таким образом, подкаталог run был создан либо в %SystemRoot%\System32 для 64-разрядных приложений, и запущен 32-разрядный cmd, для которого этот каталог не существует, потому что нет подкаталога run в %SystemRoot%\SysWOW64, который %SystemRoot%\System32 для 32-разрядных cmd.exe или подкаталог run был создан в %SystemRoot%\System32 для 32-разрядных приложений и запущен 64-разрядный cmd, для которого этот каталог не существует, потому что в %SystemRoot%\System32 нет подкаталога run, поскольку этот подкаталог существует только в %SystemRoot%\SysWOW64.

Следующий код можно использовать в верхней части командного файла, если подкаталог run находится в %SystemRoot%\System32 для 64-разрядных приложений:

@echo off
set "SystemPath=%SystemRoot%\System32"
if not "%ProgramFiles(x86)%" == "" if exist %SystemRoot%\Sysnative\* set "SystemPath=%SystemRoot%\Sysnative"

Каждое консольное приложение в System32\run каталоге должно выполняться с %SystemPath% в пакетном файле, например %SystemPath%\run\YourApp.exe.

Как это работает?

В Windows x86 нет переменной среды ProgramFiles (x86), поэтому на самом деле существует только один %SystemRoot%\System32, как определено вверху.

Но есть переменная среды ProgramFiles (x86) со значением в Windows x64. Так что в Windows x64 дополнительно проверяется наличие файлов в %SystemRoot%\Sysnative. В этом случае командный файл в настоящее время обрабатывается 32-битным cmd.exe, и только в этом случае %SystemRoot%\Sysnative нужно вообще использовать. В противном случае %SystemRoot%\System32 можно использовать также в Windows x64, поскольку, когда пакетный файл обрабатывается 64-битной cmd.exe, это каталог, содержащий 64-битные консольные приложения (и подкаталог run).

Примечание. %SystemRoot%\Sysnative - это не каталог! Невозможно cd на %SystemRoot%\Sysnative или использовать if exist %SystemRoot%\Sysnative или if exist %SystemRoot%\Sysnative\. Это специальный псевдоним, существующий только для 32-битных исполняемых файлов, и поэтому необходимо проверить, существует ли один или несколько файлов при использовании этого пути, используя if exist %SystemRoot%\Sysnative\cmd.exe или более общий if exist %SystemRoot%\Sysnative\*.

person Mofi    schedule 12.11.2015

Для меня сработало следующее:

  1. Откройте Registry Editor (нажмите клавишу Windows, введите regedit и нажмите Enter).
  2. Перейдите к HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun и очистите значения.
  3. Также проверьте HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun.
person aishanib7    schedule 08.02.2020
comment
Это спасло меня от большой боли :) - person chrism233; 29.09.2020
comment
Черт ... это было отличное наблюдение ... миллион спасибо !! - person Rahul Ranjan; 09.05.2021

Вам просто необходимо:

Шаг 1. Перейдите в домашний каталог C: \, набрав cd .. (2 раза)

Шаг 2. Теперь он появляется C:\>

Шаг 3: Введите dir Windows\System32\run

Вот и все, он показывает полные сведения о файлах и папках внутри целевой папки.

введите описание изображения здесь

Подробности: в качестве примера я использовал папку Windows\System32\com, вы должны ввести собственное имя папки и т. Д. Windows\System32\run

person Muhammad Nouman Khalid    schedule 10.11.2015