Ошибка "touch" не является внутренней или внешней командой, исполняемой программой или пакетным файлом появляется в командной строке Windows по одной простой причине: команда touch — это утилита Unix/Linux, и в стандартной поставке Windows её просто нет. Пользователь копирует команду из туториала по Node.js, Git или Linux, вставляет в cmd или PowerShell — и получает отказ системы.
Хорошая новость: задача, которую решает touch (создание пустого файла или обновление времени его изменения), в Windows выполняется несколькими штатными способами. Ниже разберём, почему возникает ошибка, чем заменить команду и как добавить полноценный touch в систему, если он действительно нужен.
Почему Windows не распознаёт команду touch
Командный интерпретатор Windows ищет введённую команду в двух местах: среди внутренних команд (dir, cd, copy, echo и другие, встроенные в cmd.exe) и среди исполняемых файлов в каталогах, перечисленных в переменной окружения PATH. Файла touch.exe нет ни там, ни там — отсюда и сообщение об ошибке.
Важно понимать: это не сбой системы и не признак вируса. Windows просто честно сообщает, что не знает такой программы. Та же ошибка возникает с любой несуществующей командой — например, если опечататься в имени ipconfig.
Чем заменить touch: штатные способы Windows
Чаще всего touch используют, чтобы быстро создать пустой файл. В cmd для этого есть несколько рабочих вариантов:
copy nul filename.txt
type nul > filename.txt
echo. 2> filename.txt
Первый вариант — copy nul имя_файла — копирует «пустое» устройство NUL в новый файл. Второй перенаправляет пустой вывод в файл. Оба создают файл нулевого размера в текущем каталоге.
В PowerShell синтаксис другой и более читаемый:
New-Item -ItemType File -Name "filename.txt"
ni filename.txt
Команда ni — это короткий псевдоним (alias) для New-Item. Если файл с таким именем уже существует, PowerShell выдаст предупреждение, но не перезапишет содержимое без дополнительных параметров.
- 📄
copy nul file.txt— создать пустой файл в cmd - 📄
type nul > file.txt— альтернатива через перенаправление - 📄
New-Item file.txt— способ для PowerShell - 📄
echo. > file.txt— создаёт файл с одной пустой строкой
Как получить настоящий touch в Windows
Если вы регулярно работаете с кроссплатформенными скриптами, удобнее установить настоящую утилиту touch. Самый распространённый путь — Git for Windows: вместе с ним ставится среда Git Bash, где доступны touch, ls, grep и десятки других Unix-команд.
Проверить наличие Git Bash просто: нажмите Win + S, введите «Git Bash» и запустите найденное приложение. В открывшемся окне команда touch test.txt будет работать без ошибок.
Другие варианты:
- 🐧 WSL (подсистема Windows для Linux) — полноценное Linux-окружение, ставится командой
wsl --installв PowerShell от имени администратора - 🛠️ BusyBox для Windows — один исполняемый файл с набором Unix-утилит
- 📦 Пакетные менеджеры winget или Chocolatey — через них ставятся сборки coreutils
Добавление Unix-утилит в PATH
Иногда touch установлен (например, в составе Git), но команда всё равно не находится в обычном cmd. Причина — каталог с утилитами не добавлен в переменную PATH. У Git for Windows Unix-инструменты лежат примерно в C:\Program Files\Git\usr\bin — точный путь зависит от того, куда установлен Git.
Порядок действий для добавления каталога в PATH:
☑️ Добавление пути в PATH
⚠️ Внимание: переменные среды применяются только к новым процессам. Уже открытое окно cmd или PowerShell не увидит изменений — закройте его и откройте заново, иначе ошибка «не является внутренней или внешней командой» сохранится даже после правильной настройки.
Проверить результат можно командой where touch — она покажет полный путь к найденному исполняемому файлу. Если вывод пуст, значит, каталог всё ещё не в PATH или путь указан с ошибкой.
Сравнение способов решения
| Способ | Где работает | Что даёт | Сложность |
|---|---|---|---|
| copy nul / type nul | cmd | Создание пустого файла | Минимальная |
| New-Item (ni) | PowerShell | Создание файла, читаемый синтаксис | Минимальная |
| Git Bash | Отдельный терминал | Настоящий touch и Unix-команды | Установка Git |
| WSL | Linux-окружение | Полная совместимость с Linux | Средняя |
| Добавление в PATH | cmd / PowerShell | touch доступен везде | Настройка системы |
Для разовой задачи достаточно copy nul — не нужно ничего устанавливать. Для постоянной разработки с кроссплатформенными скриптами разумнее один раз настроить Git Bash или WSL.
Почему в туториалах везде пишут touch
Большинство гайдов по Node.js, React, Docker и Git пишутся на macOS или Linux, где touch — встроенная команда. Авторы часто забывают, что у пользователей Windows этой утилиты нет. Поэтому при следовании таким инструкциям просто заменяйте «touch файл» на «ni файл» в PowerShell или «copy nul файл» в cmd — смысл команды от этого не меняется.
Если ошибка появляется с другими командами
Тот же текст ошибки выводится для любой нераспознанной команды: python, node, npm, git. Логика диагностики одинаковая — сначала убедитесь, что программа вообще установлена, затем проверьте, есть ли её каталог в PATH.
⚠️ Внимание: если команда раньше работала, а теперь выдаёт «не является внутренней или внешней командой», возможная причина — повреждение переменной PATH при установке или удалении другой программы. Откройте свойства системы и проверьте, не исчезли ли нужные пути из списка.
Быстрая диагностика: выполните echo %PATH% в cmd или $env:Path в PowerShell и поищите в выводе каталог нужной программы. Если его нет — добавьте через «Переменные среды», как описано выше.
Часто задаваемые вопросы
Можно ли просто скачать touch.exe и положить в системную папку?
Технически да — исполняемый файл, помещённый в каталог из PATH (например, C:\Windows\System32), будет запускаться как команда. Однако безопаснее использовать проверенные источники: Git for Windows, BusyBox или пакетные менеджеры. Случайные exe-файлы из сети — риск для безопасности.
Чем отличается поведение touch в Linux от замен в Windows?
В Linux touch не только создаёт файл, но и обновляет метку времени существующего файла, не меняя содержимого. Команды copy nul и New-Item решают только задачу создания. Для обновления времени изменения в PowerShell можно использовать (Get-Item file.txt).LastWriteTime = Get-Date.
Почему после добавления пути в PATH команда всё равно не находится?
Наиболее частые причины: не перезапущена командная строка, путь добавлен с опечаткой, либо изменения внесены в пользовательскую PATH, а терминал запущен в другом контексте. Проверьте командой where touch и при необходимости перезагрузите компьютер.
Работает ли touch в PowerShell без установки чего-либо?
Нет, в чистом PowerShell команды touch нет — но есть алиасы и аналоги: ni, New-Item или Out-File. Некоторые среды (например, PowerShell с установленными модулями или профилями) могут добавлять собственный алиас touch, но это не стандартное поведение.
Ошибка появляется в Makefile или npm-скрипте — что делать?
Замените вызов touch на кроссплатформенный вариант. Для npm-скриптов существуют пакеты-обёртки, эмулирующие Unix-команды под Windows, либо можно переписать скрипт на Node.js. В Makefile для Windows-окружений часто используют Git Bash как shell.