Запустить файл из командной строки — значит передать оболочке (cmd.exe или PowerShell) имя или путь к файлу, после чего она находит его и запускает: программу .exe — напрямую, пакетный файл .bat/.cmd — через cmd, скрипт .ps1 — через PowerShell, а документ вроде PDF — в программе, назначенной для этого типа. Ниже — как оболочка ищет файл, способы запуска, скрипты и политика выполнения, перезапуск и типовые ошибки.
Содержание
- Мини-словарь: что с чем не путать
- Как открыть консоль
- Быстрый ответ: какой командой что запускать
- Как оболочка ищет файл
- Способ 1. По имени через PATH
- Способ 2. По полному или относительному пути
- Способ 3. Команда start и Start-Process
- Скрипты: .bat, .cmd и .ps1
- Политика выполнения PowerShell
- Перезапуск зависшей программы
- Если не получилось: симптом -> причина -> что делать
- Как узнать путь к файлу
- Выводы
- Где применяется / связь с практикой
- FAQ
Актуально для Windows 11 и PowerShell 7 (сентябрь 2026). Вывод примеров PowerShell получен реальным прогоном в PowerShell 7.6; поведение cmd описано по штатной логике Windows.
Мини-словарь: что с чем не путать
- cmd.exe — классический интерпретатор команд Windows. Понимает
.bat/.cmd, командыcd,start,where. - PowerShell — объектная оболочка. В Windows встроен Windows PowerShell 5.1 (
powershell.exe), отдельно ставится PowerShell 7 (pwsh.exe). Синтаксис запуска у них общий, но есть отличия. - Терминал (Windows Terminal) — окно, в котором работает оболочка: в одной вкладке может быть cmd, в другой PowerShell.
- PATH — переменная среды со списком папок, где оболочка ищет программу, если указано только имя.
Как открыть консоль
Win + R-> ввестиcmdилиpowershell-> Enter.Win + X-> «Терминал». Для задач, требующих прав, — «Терминал (администратор)», но только когда это действительно нужно.- В Проводнике открыть нужную папку, в адресной строке ввести
cmdи нажать Enter: консоль откроется сразу в этой папке, и файл можно запускать по короткому имени.
Быстрый ответ: какой командой что запускать
| Что запускаем | cmd | PowerShell |
|---|---|---|
| Программа из PATH | notepad |
notepad |
| Файл в текущей папке | app.exe |
.\app.exe |
| Путь с пробелами | "C:\My Tools\app.exe" |
& "C:\My Tools\app.exe" |
| Документ по ассоциации | start "" report.pdf |
Start-Process report.pdf |
| Пакетный файл | build.bat |
.\build.bat |
| Скрипт PowerShell | pwsh -File script.ps1 |
.\script.ps1 |
Как оболочка ищет файл
Когда вы вводите только имя, cmd сначала смотрит в текущую папку, затем по порядку во все папки из PATH. Расширение можно не писать: cmd перебирает расширения из переменной PATHEXT (там есть .COM, .EXE, .BAT, .CMD и другие).
PowerShell ведет себя иначе: в текущей папке он программы и скрипты по одному имени не ищет. Это защитная мера — чтобы подложенный в папку файл notepad.exe не запустился вместо системного. Поэтому файл из текущей папки в PowerShell запускают с префиксом .\.
Проверить, какой файл реально запустится по имени:
where notepad
Get-Command notepad
Обе команды показывают полный путь; если нашлось несколько файлов, запустится первый.
Способ 1. По имени через PATH
Для программ из PATH достаточно имени: notepad (Блокнот), calc (Калькулятор), explorer (Проводник), taskmgr (Диспетчер задач), charmap (Таблица символов). Чтобы открыть файл в программе, передайте его аргументом: notepad notes.txt.
Если утилита лежит в своей папке, например C:\Tools, эту папку можно добавить в PATH только для текущего окна консоли (после закрытия окна изменение пропадет) — в cmd и в PowerShell соответственно:
set PATH=%PATH%;C:\Tools
$env:Path += ';C:\Tools'
Постоянно PATH меняют через «Параметры» -> «Система» -> «О системе» -> «Дополнительные параметры системы» -> «Переменные среды». Команду setx PATH "%PATH%;..." для этого лучше не использовать: она склеивает системный и пользовательский PATH в один и может обрезать длинное значение.
Способ 2. По полному или относительному пути
Полный путь работает из любой папки. Если в пути есть пробелы, его берут в кавычки:
"C:\Program Files\Notepad++\notepad++.exe" C:\Work\notes.txt
В PowerShell строка в кавычках — это просто текст, а не команда. Для запуска нужен оператор вызова &. Ниже — ошибка, исправление и результат на одном скрипте.
Неверно (PowerShell видит строку, а за ней непонятный параметр):
"C:\My Scripts\hello.ps1" -Name Otus
ParserError:
Unexpected token '-Name' in expression or statement.
Без параметров такая строка вообще ничего не запустит — PowerShell просто выведет ее текст. Исправление:
& "C:\My Scripts\hello.ps1" -Name Otus
Относительный путь считается от текущей папки. Перейти в нее можно командой cd. В cmd для смены диска нужен ключ /d, иначе диск не переключится:
cd /d D:\Projects\app
app.exe
cd D:\Projects\app
.\app.exe
Способ 3. Команда start и Start-Process
start в cmd запускает программу или документ в отдельном процессе, и консоль сразу свободна. Документ откроется в программе по ассоциации: start "" report.pdf, а start . откроет текущую папку в Проводнике.
Главная ловушка: первый аргумент в кавычках start считает заголовком окна. Команда start "C:\My Tools\app.exe" откроет пустое окно консоли с таким заголовком вместо программы. Поэтому первым ставят пустой заголовок:
start "" "C:\My Tools\app.exe"
start "" /wait "C:\My Tools\setup.exe"
start "" /d "C:\My Tools" app.exe
Ключ /wait заставляет дождаться завершения, /d задает рабочую папку программы. Ключи /high и /low меняют приоритет процесса.
Аналог в PowerShell — Start-Process:
Start-Process notepad -ArgumentList 'C:\Work\notes.txt'
Start-Process 'C:\My Tools\setup.exe' -Wait
Start-Process report.pdf
Скрипты: .bat, .cmd и .ps1
Минимальный полный пример. Сохраните файл hello.ps1:
param([string]$Name = "мир")
"Привет, $Name!"
exit 3
Если в скрипте есть кириллица и вы запускаете его в Windows PowerShell 5.1, сохраните файл в кодировке «UTF-8 с BOM»: без BOM 5.1 читает файл в кодировке ANSI, и вместо «Привет» появятся кракозябры. PowerShell 7 по умолчанию читает UTF-8 и без BOM.
Запуск из папки со скриптом по одному имени падает (текст ошибки — из PowerShell 7, в 5.1 он почти такой же):
PS> hello.ps1
The term 'hello.ps1' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
С префиксом .\ скрипт выполняется, а код завершения попадает в $LASTEXITCODE:
PS> .\hello.ps1 -Name Otus
Привет, Otus!
PS> $LASTEXITCODE
3
Из cmd или планировщика скрипт PowerShell запускают через саму оболочку: pwsh -File C:\Scripts\hello.ps1 -Name CI (для Windows PowerShell 5.1 — powershell -File ...). Код exit 3 станет кодом процесса, в cmd его видно через echo %ERRORLEVEL%.
Пакетные файлы .bat/.cmd в cmd запускаются по имени, в PowerShell — как .\build.bat: PowerShell сам передаст их в cmd.
Политика выполнения PowerShell
Политика выполнения (execution policy) определяет, какие скрипты .ps1 PowerShell согласится запускать. Значение по умолчанию зависит от оболочки. Во встроенном Windows PowerShell 5.1 на клиентских Windows (10, 11) действует Restricted — скрипты запрещены, и первая попытка запуска заканчивается ошибкой со словами «running scripts is disabled on this system». В PowerShell 7 на Windows по умолчанию уже RemoteSigned, поэтому свои локальные скрипты там запускаются без настройки. Настройки у двух оболочек независимые: разрешение в одной не действует в другой.
Важно понимать границу механизма: Microsoft прямо пишет, что политика выполнения — не система безопасности, а защита от случайного запуска. Поэтому правильный ход — не отключить ее совсем, а выбрать минимально достаточный режим:
# посмотреть политику на всех уровнях
Get-ExecutionPolicy -List
# разрешить только в текущем окне, после закрытия - как было
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
# или постоянно, но только для своего пользователя
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
RemoteSigned разрешает ваши локальные скрипты, а скачанные из интернета требует подписывать. Если скачанный скрипт не запускается, сначала прочитайте его код и убедитесь в источнике, и только потом снимите пометку командой Unblock-File .\script.ps1. Режимы Bypass и Unrestricted для постоянной работы не ставьте: они убирают и эту защиту от случайного запуска.
Перезапуск зависшей программы
Сначала попросите программу закрыться штатно, принудительное завершение /F — крайняя мера: несохраненные данные будут потеряны.
:: 1. попросить программу закрыться штатно
taskkill /IM notepad.exe
:: 2. только если она не отвечает - принудительно
taskkill /IM notepad.exe /F
:: 3. запустить заново
start "" notepad
Шаги 2 и 3 не стоит склеивать через taskkill ... /F && start "" notepad. Оператор && выполняет вторую команду, только если первая завершилась успешно (& выполнил бы ее в любом случае), а если программа уже закрылась на шаге 1, taskkill вернет ошибку «процесс не найден» и перезапуск не случится. Для цепочек && удобен там, где без первой команды вторая бессмысленна: cd /d C:\Tools && app.exe. В PowerShell 7 && тоже работает, в Windows PowerShell 5.1 его нет — там пишут команды отдельными строками или через ;.
В PowerShell штатное закрытие и принудительное — разные команды: Stop-Process завершает процесс сразу, как taskkill /F.
# штатно: как нажатие на крестик окна
(Get-Process notepad).CloseMainWindow()
# крайняя мера: завершить без сохранения
Stop-Process -Name notepad
Start-Process notepad
Если не получилось: симптом -> причина -> что делать
| Симптом | Причина | Что делать |
|---|---|---|
| cmd: «не является внутренней или внешней командой» | Файла нет в текущей папке и в PATH | Проверить where имя, запустить по полному пути или перейти cd /d в папку |
| PowerShell: «is not recognized as … cmdlet» при файле в папке | Нет префикса .\ |
Запустить .\file.exe |
| cmd: «’C:\Program’ не является командой» | Путь с пробелами без кавычек | Взять путь в кавычки |
start "путь" открыл пустое окно |
Кавычки ушли в заголовок | start "" "путь" |
| «running scripts is disabled» | Политика Restricted (по умолчанию в Windows PowerShell 5.1) |
Set-ExecutionPolicy -Scope Process RemoteSigned |
| «Отказано в доступе» | Нужны права администратора | Открыть «Терминал (администратор)» только для этой задачи |
| Окно мелькнуло и закрылось | Консольная программа завершилась | Запускать из уже открытой консоли или через cmd /k |
Как узнать путь к файлу
- Правая кнопка по файлу в Проводнике -> «Копировать как путь»: путь попадет в буфер уже в кавычках.
- Перетащить файл мышью в окно консоли — путь вставится в строку.
- Для ярлыка: «Свойства» -> поле «Объект»; для программы из PATH —
where имяили(Get-Command имя).Source.
Выводы
- По имени запускаются программы из PATH; cmd дополнительно ищет в текущей папке, PowerShell — нет, поэтому там нужен
.\. - Путь с пробелами — в кавычках; в PowerShell перед ним ставится оператор
&. start "" файлиStart-Processзапускают программу отдельно и открывают документы по ассоциации; пустой заголовок уstartобязателен, если путь в кавычках.- Скрипты
.ps1в Windows PowerShell 5.1 по умолчанию блокирует политика выполнения (в PowerShell 7 по умолчаниюRemoteSigned): разрешайтеRemoteSignedна уровне Process или CurrentUser, а не отключайте проверку совсем. - Код завершения программы виден в
%ERRORLEVEL%(cmd) и$LASTEXITCODE(PowerShell) — на нем строятся цепочки&&и сценарии автоматизации.
Где применяется / связь с практикой
Освойте тему на практике
Запуск программ и скриптов из консоли — база администрирования Windows: установка ПО без мыши, задачи планировщика, обслуживание рабочих станций и серверов, автоматизация на PowerShell. Системно эти навыки, вместе с управлением пользователями, политиками и сервером, разбирают на курсе «Администратор Windows». Чтобы сначала посмотреть формат занятий, подойдут бесплатные открытые уроки Otus.
FAQ
Как запустить программу от имени администратора прямо из консоли?
В PowerShell — Start-Process app.exe -Verb RunAs: появится запрос UAC. Команда runas в cmd запускает от имени другого пользователя, а не повышает права текущего.
Чем .bat отличается от .cmd?
Оба выполняет cmd, и для простых сценариев разницы нет. Различия есть в деталях, например в том, как отдельные команды меняют ERRORLEVEL, поэтому для новых скриптов обычно выбирают .cmd.
Почему .ps1 по двойному щелчку открывается в редакторе, а не выполняется?
Так задумано: запуск скрипта случайным щелчком считается риском. Запускайте его из консоли через .\script.ps1 или pwsh -File script.ps1.



