Ошибка «touch не является внутренней или внешней командой» в Windows: причины и решения

Ошибка "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
📊 Где вы столкнулись с ошибкой touch?
В обычной командной строке cmd
В PowerShell
При следовании туториалу по Node.js / Git
В скрипте или Makefile

Добавление Unix-утилит в PATH

Иногда touch установлен (например, в составе Git), но команда всё равно не находится в обычном cmd. Причина — каталог с утилитами не добавлен в переменную PATH. У Git for Windows Unix-инструменты лежат примерно в C:\Program Files\Git\usr\bin — точный путь зависит от того, куда установлен Git.

Порядок действий для добавления каталога в PATH:

☑️ Добавление пути в PATH

Выполнено: 0 / 5
⚠️ Внимание: переменные среды применяются только к новым процессам. Уже открытое окно cmd или PowerShell не увидит изменений — закройте его и откройте заново, иначе ошибка «не является внутренней или внешней командой» сохранится даже после правильной настройки.

Проверить результат можно командой where touch — она покажет полный путь к найденному исполняемому файлу. Если вывод пуст, значит, каталог всё ещё не в PATH или путь указан с ошибкой.

Сравнение способов решения

СпособГде работаетЧто даётСложность
copy nul / type nulcmdСоздание пустого файлаМинимальная
New-Item (ni)PowerShellСоздание файла, читаемый синтаксисМинимальная
Git BashОтдельный терминалНастоящий touch и Unix-командыУстановка Git
WSLLinux-окружениеПолная совместимость с LinuxСредняя
Добавление в PATHcmd / PowerShelltouch доступен вездеНастройка системы

Для разовой задачи достаточно 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.