Ls не является внутренней или внешней командой для исполняемой программы или пакетного файла

Обновлено: 02.07.2024

Я использую cmder-версию cmd.exe, и команда ls работала нормально. Я не знаю, что изменилось, но это больше не распознается.

Кто-нибудь знает решение этой проблемы?

Текст был успешно обновлен, но возникли следующие ошибки:

dmxt прокомментировал 9 декабря 2015 г.

@glucas Как добавить ls в PATH?

Комментарий MartiUK от 9 декабря 2015 г.

Вы пробовали установить полную версию cmder?

dmxt прокомментировал 9 декабря 2015 г.

@MartiUK Я установил полную версию cmder, и несколько дней назад она работала нормально, и я понятия не имею, что произошло, она просто перестала работать сама по себе.

glucas прокомментировал 10 декабря 2015 г.

Есть несколько вещей, которые вы должны изучить:

Что в данный момент находится на вашем пути к командной оболочке? Используйте set PATH, чтобы просмотреть список записей пути, разделенных точкой с запятой. Предположительно там есть записи для cmder и некоторых его подкаталогов.

Установили ли вы какую-либо версию Git вне cmder?

и исполняемый файл ls

Либо что-то не так с вашей установкой, и вам не хватает этих каталогов/файлов, либо они у вас есть, но ваш PATH по какой-то причине не включает каталог. Если у вас есть файлы, вы можете попробовать добавить каталог, содержащий ls.exe, к вашему пути из оболочки, например,

Затем попробуйте ls и посмотрите, работает ли он. Если это так, вы можете скопировать ту же строку в свой файл cmder/config/user-startup.cmd, чтобы сделать изменение постоянным. (Если вы используете более старую версию cmder, у вас может не быть файла, и вам придется поместить его в другое место).

комментарий nmstoker от 6 октября 2016 г.

Я знаю, что это устарело, но подумал, что это может быть актуально для кого-то.

@dmxt не уверен, что это тот же самый корень, но у меня был именно этот симптом при установке новой полной версии cmder, и я в конце концов понял (благодаря указателям @glucas выше), что это было неправильно для меня, потому что моя версия Git для Windows был довольно старым и, похоже, не имел каталога /usr.

Поэтому, когда cmder определял, что у меня уже есть Git, и добавлял для этого в мой PATH (см. init.bat в *cmder\vendor* ), он пытался искать в *\Git \usr\bin* для ls.exe и не смог его найти (поскольку такого каталога не было).

Вместо того, чтобы редактировать init.bat (и столкнуться с ошибкой при последующем обновлении cmder), я просто установил новейшую версию Git для Windows, и при повторном открытии cmder все было в порядке 😄

sderrico прокомментировал 17 октября 2016 г.

@nmstoker Спасибо! С вашим комментарием мне понадобилось 2 минуты, чтобы решить эту проблему!

chisumo2016 прокомментировал 7 ноября 2016 г.

Привет
Мне нужна помощь, чтобы решить эту проблему. Потратил 7 часов без удачи

'C:\Program' не распознается как внутренняя или внешняя команда,
рабочая программа или пакетный файл.

chisumo2016 прокомментировал 7 ноября 2016 г.

Привет
Мне нужна помощь, чтобы решить эту проблему. Потратил 7 часов без удачи

'C:\Program' не распознается как внутренняя или внешняя команда,
рабочая программа или пакетный файл

комментарий nmstoker от 7 ноября 2016 г.

@niangeta извините, но вы не предоставили достаточно подробностей, чтобы кто-либо мог решить вашу проблему (хотя у меня есть несколько догадок). Поскольку это вполне может быть совершенно отдельной причиной от этой проблемы, я предлагаю проверить существующие проблемы и, возможно, поднять новую проблему, если вы все еще не заполнили здесь и Stackoverflow. Удачи!

Командная строка — удобный способ выполнения определенных задач, но иногда она не распознает, что вы от нее хотите. Вот как это исправить.

Командная строка в Windows — это удобная утилита. Позволяет быстро выполнять многие задачи; однако командный процессор может отображать ошибку «не распознана как внутренняя или внешняя команда» при попытке выполнить команду.

Это распространенная ошибка, обычно возникающая из-за неправильного выполнения команды. В этой статье объясняются причины и несколько шагов по устранению неполадок, которые помогут вам исправить эту ошибку.

Почему возникает ошибка «Не распознана как внутренняя или внешняя команда»?

ОС Windows хранит список путей, известных как переменные среды Windows, для быстрого запуска и выполнения программ. Любые проблемы с ним могут вызвать ошибку.

Возможные проблемы, вызывающие эту ошибку, включают:

  • Неверные команды.
  • Записи реестра, прерывающие работу команд и многое другое.
  • Исполняемые программы или сценарии не установлены.
  • Неправильно указан путь или имя файла.
  • Отсутствует каталог файлов в переменных среды Windows.

Как исправить ошибку «Не распознана как внутренняя или внешняя команда»

Эта ошибка часто возникает, когда вы запускаете программу или команду CMD, и что-то идет не так.Мы перечислили исправления для обеих версий ошибки, поэтому следуйте инструкциям, соответствующим вашему случаю.

1. Проверьте, установлена ​​ли программа

Командная строка не может запустить несуществующую программу. Если вы пытаетесь запустить только что установленную программу, убедитесь, что она установлена ​​правильно.

Чтобы проверить установку:

  1. Нажмите Win + R, чтобы открыть меню «Выполнить». Затем введите control и нажмите OK.
  2. Затем в Панели управления выберите "Программы" > "Программы и компоненты".
  3. Прокрутите список установленных приложений и найдите приложение, которое хотите запустить.

Кроме того, вы также можете просмотреть установленные приложения, выбрав «Приложения и функции» в настройках. Для этого нажмите клавишу Windows + I, нажмите «Приложения» и найдите установленное приложение.

По умолчанию, когда вы пытаетесь запустить программу или скрипт из CMD, командный процессор ищет связанные файлы и пути в папке System32 или переменных среды. Если файл отсутствует, он вернет ошибку, не распознанную как внутреннюю или внешнюю команду, исполняемую программу или пакетный файл.

Вероятно, это связано с тем, что Windows устанавливает большинство приложений не в папку System32, а в папку C:\Program Files.

Вы можете решить эту проблему тремя способами:

  1. Во-первых, используйте полный путь к исполняемому файлу для запуска программы.
  2. Во-вторых, добавьте путь к программе в переменные среды Windows.
  3. Наконец, переместите файлы в папку System32.

2. Используйте полный путь к файлу для выполнения команды

Сначала попробуем метод полного пути. Здесь мы будем использовать полный путь к файлу вместо имени приложения для запуска программ из командной строки. Вот как это сделать:

  1. Сначала откройте командную строку от имени администратора.
  2. Затем введите полный путь к приложению, которое хотите запустить. Например, если вы хотите открыть порт ESBCalc, расположенный в каталоге C:\, то команда для открытия приложения с полным путем будет выглядеть примерно так:
  3. Тем не менее, это будет работать только в том случае, если путь к файлу не содержит пробелов. Если в пути к файлу есть пробел, введите путь к файлу в двойных кавычках.

3. Используйте полный путь к файлу в двойных кавычках

Командная строка считывает пробелы как конец команды и обрабатывает все, что находится после пробела, как отдельную команду.

Допустим, вы хотите запустить приложение Internet Explorer, расположенное в папке C:\Program Files\Internet Explorer\iexplore.exe, с помощью CMD. Однако запуск этого пути к файлу вернет ошибку из-за пробела между Program Files и Internet Explorer.

Чтобы избежать этого, вы можете вставить путь к файлу в двойных кавычках. Здесь команда для запуска Internet Explorer будет выглядеть так:

4. Добавьте путь к файлу в переменные среды Windows

Вы можете изменить переменные среды и добавить путь к файлу вашего приложения в его каталог. Таким образом, командная строка определит путь для введенной команды и выполнит ее без ошибки.

Добавление полного пути к файлу в переменную среды Windows может помочь устранить ошибку, не распознанную как внутреннюю или внешнюю команду для Flex, nmake, make, cobra, Is, terraform, gcc, code, Android Studio, Python, Fastboot и команды ADB.

Чтобы изменить переменную среды Windows:

  1. Нажмите Win + R, чтобы открыть «Выполнить».
  2. Далее введите control и нажмите OK, чтобы открыть панель управления.
  3. Перейдите в раздел Система и безопасность > Система. На левой панели нажмите Дополнительные параметры системы.

Чтобы начать их изучение, мы перейдем к нашему открытому окну оболочки. Команды в основном читают и записывают файлы в текущем рабочем каталоге, т.е. «здесь». Мы можем передать команде параметр --help, например: команды обычно выводят сообщение об ошибке, похожее на:.

JDK 1.7.0 установлен в моей Windows 7 и смог установить переменную пути 'javac' не распознается как внутренняя или внешняя команда. Не удаляйте существующий путь, просто нажмите и перейдите в левый конец и вставьте строку выше. Вывод PATH, который вы получите, просто скопируйте его в текстовый редактор

Вы не можете использовать команду ls в cmd, поскольку она не поставляется с Windows, но вы можете использовать ее в других терминальных программах (например, GitBash). Если вы действительно хотите использовать ls , вы можете установить сторонние инструменты, позволяющие запускать команды unix в Windows. Такой программой является подсистема Microsoft Windows для Linux (ссылка на документы).

Исправить Команда не распознается как внутренняя или внешняя команда в Windows 10. Шаг 1] Проверьте, действительно ли программа существует в системе. Поскольку у вас может не получиться запустить программу, попробуйте проверить, существует ли ее файл .exe в папке C:\Windows\System32\. Шаг 2] Измените переменные среды.

Я использую cmder-версию cmd.exe, и команда ls работала нормально.Я не знаю, что C:\Users\Dana λ ls 'ls' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. установите PATHC:\cmder\vendor\git-for-windows\usr\bin;%PATH% Мне нужна помощь, чтобы решить эту проблему.

UAC (управление доступом пользователей) для экстренного устранения неполадок. Включение учетной записи суперадминистратора с помощью командной строки — один из самых простых способов. учетную запись суперадминистратора, затем используйте следующие команды. Когда он не пишет для MTE, он пишет для того, чтобы делиться советами, рекомендациями и

Если вы пробуете команду в среде Codecademy и обнаруживаете, что она не работает должным образом, убедитесь, что вы вводите ее точно так, как было задано: ls . Обратите внимание, что Ls не будет работать — команды чувствительны к регистру! Любая другая вариация не подойдет. Попробуйте перезагрузить страницу.

Это довольно просто сделать, и вы можете сделать это, выполнив следующие действия: Щелкните правой кнопкой мыши только что созданный ярлык командной строки и выберите в меню «Свойства». Перейдите на вкладку «Безопасность» и нажмите кнопку «Дополнительно». Установите флажок «Запуск от имени администратора» и нажмите «ОК».

Похоже, что некоторые библиотеки DLL Windows повреждены. Попробуйте запустить средство проверки системных файлов (sfc.exe) и посмотрите, не найдет ли оно что-нибудь отсутствующее. Также может быть вызвано некоторыми вирусами или вредоносными программами. с 0 на 4 и запустите sfc /scannow, и проблема должна быть устранена.

javac' не распознается как внутренняя или внешняя команда, работоспособная Если вы получили эту ошибку, вы забыли включить суффикс .java при компиляции программы. Если вы введете ls в командной строке, вы должны увидеть файлы .java и .class.

командная строка), так как не распознается как внутренняя или внешняя команда, является вашей ошибкой. Самый простой способ исправить это - заменить двойные кавычки одинарными кавычками и powershell.exe -Command "Get-Content file.text | %

Super User CMD v1.2.1 [2019/07/03] — запуск команд с повышенными привилегиями через UAC. Если вы являетесь активным пользователем командной строки в Windows, вам понравится, если вы выберете «Запуск от имени администратора» в контекстном меню программа, но это не так

этот термин не распознается как имя командлета». Как это исправить? Когда это происходит, я считаю, что лучше всего выделить вводимый текст, чтобы он выделялся

Когда я запускаю cmd и перехожу в DOS, ни одна из команд не работает, т.е. ipconfig и т. д.? есть идеи? Чтобы некоторые команды и параметры работали в командной строке, необходимо запустить сообщение об ошибке при попытке выполнить команду?

Весь процесс был опробован и протестирован в Windows 10 под управлением MySQL 5. Командная строка и команды CMD неизвестны большинству из пользователей. Вероятно, вы не захотите менять пароль пользователя root (поскольку в Ubuntu

Скорее всего, виноваты переменные среды в Windows. Вот как решить эту проблему. следующая ошибка в Windows: «команда» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл.

Команда не распознается как внутренняя или внешняя команда. Загрузите инструмент восстановления ПК, чтобы быстро найти и автоматически исправить ошибки Windows. Я уверен, что вы пробовали запускать такие программы, как 'CMD', 'DISM' непосредственно из

Вопрос Почему команда 'ls' не работает, когда я пробую ее на своем компьютере или в PowerShell, но не вижу напечатанного текста. Вместо этого Вы правы, приглашение $ не нужно вводить в командной строке.

Я использую cmder-версию cmd.exe, и команда ls работала нормально. C:\Users\Dana λ ls 'ls' не распознается как внутренняя или внешняя команда, исполняемая программа или Ошибка указывает на то, что ls отсутствует в вашем PATH.

C:\Users\Dana λ ls 'ls' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. λ где ls C:\opt\cmder\vendor\git-for-windows\usr\bin\ls.exe @glucas glucas прокомментировал 10 декабря 2015 г.

Я использую cmder-версию cmd.exe, и команда ls работала нормально. C:\Users\Dana λ ls 'ls' не распознается как внутренняя или внешняя команда, рабочий набор PATHC:\cmder\vendor\git-for-windows\usr\bin;%PATH%.

Как исправить неработающую командную строку в Windows 10 Ошибка «Подсказка об ошибке не работает», чтобы вы могли вернуться и выполнить эти команды. Для командной строки требуются права администратора, что означает учетную запись пользователя, которая

(Я помню исключения, но не могу вспомнить имена :-) ). ls почти никогда не является командой; вместо этого это приложение, исполняемая программа, обычно находящаяся как /bin/ls,

C:\RailsApps\Slambook> ls 'ls' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. 'chmod' не распознан как внутренний или

Как исправить, если команда Windows не распознается как внутренняя или внешняя. C:\RailsApps\Slambook> ls 'ls' не распознается как внутренняя или внешняя команда,

Первый шаг — проверить, что у вас есть в переменной окружения PATH. Запустите set path и проверьте это. c:\>установить путь к папкеC:\Program Files (x86)\Windows

Сегодня при изучении TP5 новый модуль каталога с использованием командной строки при ошибке, как показано ниже. Причина очень тонкая, без конфигурации среды

Выполнить эхо Текущий каталог: %CD% в командной строке или добавить эту строку в не подходит для отладки пакетного файла, так как сообщения об ошибках не отображаются в этом

Окно 'ls' не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Поиск программиста, лучший сайт для обмена техническими сообщениями программистов.

"xxxxxx" не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. Кто-нибудь знает решение? Делиться. Поделитесь ссылкой на это

bash_profile не будет работать. Я не могу настроить Finder для отображения всех файлов, так как мой терминал не распознает команды, необходимые для этого. что мне нужно

Меню. Дома. Как исправить не распознается как внутренняя или внешняя команда в Windows. Fix Команда CMD не распознала ошибки. В сегодняшнем посте я

1.Получаете ли вы какие-либо сообщения об ошибках? 2. Вы запускаете командную строку от имени администратора? Чтобы некоторые команды и параметры работали в командной строке

Важной частью здесь является не команда, отображаемая в ошибке, а то, как это исправить: если да, продолжайте с остальными, если нет, сначала установите ее.

ls' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл." или " 'rm' не распознается как внутренняя или внешняя

У меня есть сценарий bash, который говорит «имитация». Когда я набираю симулировать в командной строке cmd, он говорит, что команда не найдена. но когда я набираю ./simulate, он работает. Что может

На самом деле это одна из самых распространенных ошибок, с которыми вы можете столкнуться при работе с командной строкой. Как следует из самой ошибки, он не смог распознать инструмент

Я использую текстовый редактор Visual Studio Code и всякий раз, когда ввожу такие команды, как "what npm", "ls -l", "rm css/application.css", "what node" и "ls",

C:\Users\Dana λ ls 'ls' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. Кто-нибудь знает решение

Как следует из самой ошибки, программе не удалось распознать инструмент, который вы пытались использовать с командной строкой. Существуют различные причины, по которым это

Если вы получаете запрос A не распознан как внутренняя или внешняя ошибка команды, сначала задайте правильный путь, а затем измените значение

Команда Powershell 'ls' является псевдонимом команды-let Get-ChildItem. Командлеты — это встроенные функции, которые выполняют определенные задачи! Для

Я использую cmder-версию cmd.exe, и команда ls работала нормально. Я не знаю, что изменилось, но это больше не распознается. C:\Users\Дана

Если вы сталкиваетесь с ошибками приложения или команды "не распознается как внутренняя или внешняя команда" при попытке что-то сделать в приложении

Вопрос Почему команда 'ls' не работает, когда я пробую ее на своем компьютере или в терминале Codecademy? Ответ Если ваш компьютер работает

Пользователи могут запускать исполняемые файлы Windows, такие как notepad.exe, непосредственно из Linux. Иногда вы можете нажать «команда не найдена», как показано ниже: Bash Copy.

«'ls' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл». Код ответа. «npm» не распознается как

Одна из замечательных особенностей Windows заключается в том, что вы можете выполнять многие задачи из командной строки на своем компьютере. Вам просто нужно

Если вы хотите, чтобы окно командной строки администратора оставалось открытым, когда вы (оно не кэширует учетные данные и не позволяет действительно выполнять команды

ls' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл." или в моем терминале. Как я могу решить эту проблему?

Если вы столкнулись с ошибкой «команда не распознана как внутренняя или внешняя команда, исполняемая программа или пакетный файл» в Command

или команда, вы получаете сообщение о том, что она не распознана как внутренняя или внешняя команда, работающая программа или проблема с пакетным файлом,

Я уверен, что вы пробовали запускать такие программы, как «CMD», «DISM» непосредственно из командной строки «Выполнить». Вы когда-нибудь задумывались, как они запускаются мгновенно?

Вопрос. Почему команда 'ls' не работает, когда я пытаюсь запустить Bash на Ubuntu в Windows в качестве инструмента разработчика для Windows 10.

Если переменные среды Windows перепутаны, это может привести к тому, что некоторые программы не будут работать, например командная строка. Вы можете

т. е. «ls» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. окна. МУХАММЕД САДЖАД АХМЕД.

29 голосов, 17 комментариев. 1,5 миллиона участников в сообществе ProgrammerHumor. Посвящается юмору и шуткам про программистов и

Powershell использует некоторые псевдонимы из Bash, поэтому вы можете использовать ls и pwd в Powershell. Только не в Windows cmd. 7. Поделиться. Сообщить

<р>4. Выберите «Запуск от имени администратора». значок cmd, щелкнутый правой кнопкой мыши. В: Что делать, если cmd не отображается при поиске?

Для доступа к командной строке Windows просто введите **cmd** на кнопке запуска. Затем введите реж.kodes.k

Скорее всего, виноваты переменные среды в Windows. Вот как решить эту проблему.

ls не распознается как внутренняя или внешняя команда Windows 10 (2)

A) Как интерпретатор команд Windows ищет команды?

Интерпретатор команд Windows ищет КОМАНДУ для выполнения

  1. не является внутренней командой cmd.exe и
  2. указывается просто с именем файла без расширения файла и без пути

для файла, соответствующего шаблону command.* и имеющего расширение файла, указанное в переменной локальной среды PATHEXT

  1. сначала в текущем каталоге и
  2. следующая во всех каталогах локальной переменной окружения PATH .

SORT, FIND, FINDSTR, ROBOCOPY, XCOPY и многие другие команды не являются внутренними командами cmd.exe. Это консольные приложения, установленные вместе с Windows, расположенные в каталоге %SystemRoot%\System32 и имеющие имена файлов sort.exe , find.exe , findstr.exe , robocopy.exe , xcopy.exe , .

Такие консольные приложения, доступные по умолчанию в Windows, называются внешними командами, чтобы лучше отличать их от консольных приложений, не установленных вместе с операционной системой Windows.

B) Как определяется переменная среды PATH?

Существует 3 типа переменных PATH:

Системный ПУТЬ, который используется для всех учетных записей и хранится в реестре Windows под ключом:

ПУТЬ пользователя, который используется только для текущей учетной записи и хранится в реестре Windows под ключом:

Локальный PATH, который всегда является копией локального PATH родительского процесса, запустившего текущий процесс.

Windows объединяет системный и пользовательский PATH с локальным PATH для экземпляра проводника Windows, используемого в качестве рабочего стола Windows, с ярлыками на экране рабочего стола и меню "Пуск" Windows в качестве видимого интерфейса для пользователя.

При запуске нового процесса Windows копирует всю текущую активную таблицу переменных среды запущенного процесса для нового процесса.

Родительский процесс не может изменять переменные среды любого дочернего процесса, а дочерний процесс не может изменять переменные среды своего родительского процесса.

Это означает, что после запуска такого процесса, как cmd.exe, для выполнения пакетного файла этот процесс имеет собственный набор переменных среды, которые может изменять только сам процесс. Ни один другой процесс не может изменять переменные среды уже запущенного процесса.

C) Что означает сообщение об ошибке?

Сообщение об ошибке

<цитата>

'. ' не распознается как внутренняя или внешняя команда,
действующая программа или пакетный файл.

всегда означает, что

имя файла

  • консольное приложение
  • Приложение с графическим интерфейсом
  • скрипт (пакетный файл, скрипт PowerShell, скрипт Perl, VBScript, JScript, . )


был указан для выполнения, скорее всего, без расширения файла и без (полного) пути к исполняемому файлу/файлу скрипта и

Windows не удалось найти файл, соответствующий шаблону FileName.* с расширением файла, указанным в текущей активной переменной среды PATHEXT в текущем каталоге или любом другом каталоге в текущей активной переменной среды PATH .

D) Каковы возможные причины этого сообщения об ошибке?

1. Имя исполняемого файла было указано неверно из-за опечатки.

Проверить посимвольно имя команды/исполняемого файла.

2. Текущий каталог отличается от каталога, содержащего исполняемый файл.

Выполнить эхо Текущий каталог: %CD% в командной строке или добавить эту строку в командный файл над командной строкой, которая не может определить текущий каталог.

3. Исполняемый файл или сценарий для запуска вообще не установлен.

Проверьте наличие исполняемого файла для запуска. Некоторые установочные пакеты работают только в том случае, если ранее были установлены другие пакеты, такие как Java, NPM, PHP и т. д.

4. Каталог исполняемого файла вообще не указан в PATH.

Откройте в Панели управления Windows окно «Системные настройки», щелкните «Дополнительные параметры системы» с левой стороны, нажмите кнопку «Переменные среды» и найдите в обоих списках путь и его значения. По умолчанию путь существует только в списке системных переменных.

5. Работающий процесс/приложение не было перезапущено после изменения системного или пользовательского PATH.

Изменение системного PATH или пользовательского PATH с помощью команды setx или через Панель управления — Система — Расширенные системные настройки были выполнены пользователем или установщиком, но уже запущенный процесс/приложение, например открытая командная строка или окно PowerShell, не были изменены. закрыто/закрыто и открыто/перезапущено после модификации PATH. Это необходимо, как подробно описано в главе F) ниже.

6. Исполняемый файл в %SystemRoot%\System32 не найден в 64-битной Windows.

Существует каталог %SystemRoot%\System32 с 64-битными исполняемыми файлами и %SystemRoot%\SysWOW64 с 32-битными исполняемыми файлами в 64-битной Windows. Большинство исполняемых файлов находятся в обоих каталогах. Но некоторые исполняемые файлы существуют только в System32, а некоторые только в SysWOW64.

Системный PATH по умолчанию содержит первый путь к папке %SystemRoot%\System32 . Но в какой из двух системных папок искать исполняемый файл, указанный без пути или с путем %SystemRoot%\System32, зависит от среды выполнения. Приложение или сценарий, выполняемый в 64-разрядной среде, на самом деле обращается к %SystemRoot%\System32, в то время как приложение или сценарий, выполняемый в 32-разрядной среде, перенаправляется перенаправителем файловой системы Windows в каталог %SystemRoot%\SysWOW64 .

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

Примечание. %SystemRoot%\Sysnative не является ни каталогом, ни ссылкой. Это нечто особенное, существующее только для приложений x86. Он не существует для приложений amd64. Условие существования %SystemRoot%\Sysnative в пакетном файле всегда ложно в обеих средах, но если существует %SystemRoot%\Sysnative\cmd.exe, оно истинно в 32-битной среде выполнения и ложно в 64-битной среде, а также в 32-битной среде. Окна. Это условие можно использовать в пакетных сценариях, чтобы узнать, обрабатывается ли пакетный файл 32-разрядным cmd.exe в %SystemRoot%\SysWOW64 в 64-разрядной версии Windows, что может быть важно знать в зависимости от задачи.

7. ЛОКАЛЬНАЯ переменная PATH была изменена ранее в командной строке или в пакетном файле.

Запустите set path в командной строке или добавьте эту команду в пакетный файл над командной строкой, которая не видит текущие значения переменных среды PATH и PATHEXT .

Последняя причина связана с тем, что внешняя команда SORT не может быть найдена при выполнении пакетного файла, который содержит где-то выше set path=. .

E) Как избежать этого сообщения об ошибке?

Лучше всего кодировать пакетный файл так, чтобы он не зависел от PATH и PATHEXT, а также от порядка каталогов в PATH, что здесь означает использование командной строки:

Любая внешняя команда, исполняемый файл которой хранится в %SystemRoot%\System32, должна быть указана в пакетном файле с этим путем и с расширением файла .exe . Тогда интерпретатору команд Windows не нужно искать файл, используя локальные PATH и PATHEXT, и пакетный файл работает всегда (пока переменная среды SystemRoot также не изменяется в пакетном файле, чего я никогда не видел).

F) Когда системные или пользовательские изменения PATH применяются к процессам?

Когда пользователь открывает окно командной строки через меню "Пуск" Windows или из окна проводника Windows, пользователь запускает cmd.exe с неявным использованием параметра /K, чтобы окно консоли оставалось открытым после выполнения команды, что удобно для отладки. пакетный файл.

При двойном щелчке пакетного файла в проводнике Windows пользователь запускает cmd.exe для обработки пакетного файла с неявным использованием параметра /C, чтобы закрыть окно консоли после завершения пакетной обработки, что не подходит для отладки пакетного файла, поскольку сообщения об ошибках в этом случае не видны.

В обоих случаях Windows создает копию переменных среды приложения, запускающего cmd.exe, которым обычно является проводник Windows. Поэтому запущенный командный процесс имеет локальный PATH, значение которого совпадает со значением родительского процесса при запуске cmd.exe.

Откройте окно командной строки, запустите заголовок Process1 и запустите set path .
Выходными данными являются PATH и PATHEXT, определенные в настоящее время для текущей учетной записи пользователя в окне консоли, имеющем теперь заголовок окна Process1 .

Запустите set PATH=%SystemRoot%\System32, а затем еще раз установите путь.
Вывод снова PATH и PATHEXT , но теперь PATH содержит только один каталог.

Запустите start "Process2" и запустите в новом окне консоли с заголовком окна Process2 путь к набору команд .
Выходными данными являются PATH и PATHEXT с теми же значениями, что и раньше в Process1 .
Это демонстрирует, что при запуске нового процесса копируются текущие переменные среды запущенного процесса, а не то, что сама Windows в данный момент хранит в реестре Windows.

Выполните в Process2 команду set PATH= и следующий путь set .
Выводом является только PATHEXT, потому что локальный PATH больше не существует для Process2.
Это демонстрирует, что каждый процесс может изменять свои переменные среды, включая полное удаление.

Переключитесь в окно Process1, выполните команду set PATH=%PATH%;%SystemRoot% и затем установите путь .
Вывод: PATH с двумя каталогами и PATHEXT .

Запустите команду start "Process3" и в открывшемся окне с заголовком Process3 введите команду path .
Выходными данными является PATH с двумя каталогами, определенными также для Process1 и PATHEXT .

Выполните в Process3 набор команд PATH=%SystemRoot%\System32 .

Выполняется 3 командных процесса со следующими значениями для локального PATH, когда %SystemRoot% заменяется на C:\Windows:

Process1 : PATH=C:\Windows\System32;C:\Windows
Process2 : PATH вообще не существует.
Процесс3 : PATH=C:\Windows\System32

Итак, что происходит теперь, когда вы открываете Панель управления – Система – Дополнительные параметры системы – Переменные среды и добавляете в список пользовательских переменных новую переменную среды PATH со значением C:\Temp или в случае, если уже существует пользовательская среда PATH переменную, отредактируйте PATH и добавьте ;C:\Temp к значению?

Ну, пока диалоговое окно с заголовком Переменные среды, показывающее два списка, открыто, при изменении переменных ничего не происходит, пока не будет нажата кнопка OK, чтобы принять все изменения в реестр Windows и закрыть окно.

Вернемся к трем запущенным командным процессам и запустим в Process1 , Process2 и Process3 путь набора команд . Это видно:

Process1 : PATH=C:\Windows\System32;C:\Windows
Process2 : PATH вообще не существует.
Процесс3 : PATH=C:\Windows\System32

В уже запущенных процессах ничего не изменилось.

Ни один процесс не может изменять переменные среды запущенного процесса.

Откройте из меню «Пуск» Windows еще одно окно командной строки и запустите в четвертой команде команду «Обработайте путь набора команд». Видно, что локальный PATH четвертого командного процесса теперь добавил каталог C:\Temp.

Затем закройте все 4 командных процесса и удалите добавленный пользовательский PATH, соответственно удалите ;C:\Temp из пользовательского PATH, если ранее этот путь к каталогу был добавлен.

Как это возможно, если ни один процесс не может изменять переменные среды уже запущенного процесса?

Как изменился список переменных среды экземпляра Windows Explorer, запущенного в качестве рабочего стола Windows, при закрытии окна переменных среды с помощью кнопки OK?

Ответ на эти два вопроса дал eryksun в своем комментарии.

После записи изменений системных и пользовательских переменных в реестр при нажатии кнопки OK в окне переменных среды Windows отправляет сообщение WM_SETTINGCHANGE всем окнам верхнего уровня, чтобы информировать запущенные приложения об измененных системных параметрах.

От приложения зависит, будет ли вообще обрабатываться это сообщение о событии и каким образом. Проводник Windows, работающий как рабочий стол Windows, считывает переменные среды из реестра и соответствующим образом обновляет список переменных среды. Другие приложения, такие как Total Commander, также обрабатывают это сообщение и также обновляют свои списки переменных среды. Но, к счастью, cmd.exe этого не делает, так как это было бы очень проблематично.

Есть ли возможность изменить системную или пользовательскую переменную с уведомлением через WM_SETTINGCHANGE из окна командной строки или пакетного файла?

Возможно изменить значение реестра переменной среды с помощью команды reg add. Но это не приводит к отправке сообщения WM_SETTINGCHANGE всем окнам верхнего уровня. Такие изменения, сделанные с помощью reg add или regedit, требуют перезапуска Windows (или, по крайней мере, выхода из системы и входа в систему текущего пользователя), чтобы они вообще учитывались.

Но есть еще команда setx, которая предназначена для изменения системной или пользовательской переменной и также отправляет сообщение WM_SETTINGCHANGE всем окнам верхнего уровня после обновления реестра в соответствии с указанными аргументами. Запустить setx/? в окне командной строки для получения подробной информации. Но учтите, что setx не изменяет локальную переменную среды запущенного командного процесса. Это должно быть сделано с использованием набора команд, используемого в дополнение к setx .

G) Как Windows обрабатывает переменную среды PATHEXT?

Переменная среды PATHEXT со списком расширений файлов обрабатывается Windows иначе, чем переменная среды PATH .

Системный PATHEXT и пользовательский PATHEXT НЕ объединяются в локальный PATHEXT .

Пользовательский PATHEXT заменяет системный PATHEXT для всех процессов, работающих в среде учетной записи, для которой определен пользовательский PATHEXT.

По умолчанию определена только системная переменная среды PATHEXT.

H) Можно ли отключить поиск файлов в текущем каталоге?

Командный процессор Windows по умолчанию ищет в текущем каталоге, если имя файла сценария или исполняемого файла указано в командной строке или в пакетном файле без указания пути, что означает отсутствие обратной косой черты \ (или прямой косой черты / благодаря авто- исправление) в строке аргумента.

Но в Windows Vista и более поздних версиях клиента Windows, а также в Windows Server 2003 и более поздних версиях сервера Windows действительно можно отключить поиск сценария/исполняемого файла в текущем каталоге, указанном без хотя бы относительного пути .\, определив переменную среды NoDefaultCurrentDirectoryInExePath с любым значением, как написано eryksun в его комментарии ниже и объяснено документацией Microsoft о функции NeedCurrentDirectoryForExePathA .

Подробнее об использовании этой переменной среды см. в разделе Удаление текущего рабочего каталога из пути.

У меня есть однострочный фрагмент, который отлично работает в командной строке, но дает сбой и выдает ошибки, когда я запускаю его как часть пакетного сценария.

Приведенные ниже команды ведут себя так, как ожидалось, удаляя все пустые подпапки в папке.

Однако, если вставить такой пакетный файл.

<р>. выдает стандартную ошибку:

Сортировка не распознается как внутренняя или внешняя команда

Последний час или около того я экспериментировал с выходом из канала и без него, меняя порядок параметров, просматривая документацию по dir и sort и т. д., но так и не смог понять, что здесь происходит. Остальная часть командного файла, состоящая всего из нескольких строк, работает нормально, и это единственная строка в нем, которая не работает.

Читайте также: