Пакет Windows: выполнение команды с FOR /F - "команда не найдена"

У меня проблема с выполнением другой команды в FOR-команде Windows 7 Ultimate. Команда for является частью пакетного файла и должна анализировать выходные данные другой команды.

Обычно это:

for /f %%a IN ('tasklist') DO echo %%a

должен выполнить команду "Tasklist" и вывести ее результаты через echo. Но я всегда получаю "команда не найдена".

Я попытался выполнить команду за пределами forloop, и она работает. Я также пытался выполнить много внешних команд внутри for, но каждая команда сказала "команда не найдена".

Я также попробовал примеры этого поста:

Пакет: Выполнить команду с кавычками для цикла for с конвейером, чтобы найти

Я уверен

  • что команды существуют
  • что я прочитал и исполняю права на него
  • что мой пользователь находится в группе администраторов
  • что я запускаю команды с "Запуск от имени администратора"

Но ничего не работает в этом компьютере. Те же самые команды работают на другом ПК, который также работает под управлением Windows 7 Ultimate.

Так есть ли у кого-нибудь идея, что это может быть неправильно на ПК, где не все команды найдены?

Вот пример выходных данных моей консоли, когда я пытаюсь сделать это с помощью команды "ls". ls.exe - это исполняемый файл из проекта gun4win, который находится в той же папке, где работает мой пакетный файл. Окна на немецком языке, поэтому вывод ошибок также на немецком языке.

C: \ тест>test_for.bat

C:\test>rem --- test a command stand-alone ---   

C:\test>ls 
ls.exe        test_for.bat     

C:\test>rem --- test same command in a FOR-Loop ---   

C:\test>for /F "delims=" %a in ('ls') do echo FOR-OUTPUT: %a 
Der Befehl "ls" ist entweder falsch geschrieben oder konnte nicht gefunden
werden.

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: проблема была в неправильном значении для системной переменной envoirement ComSpec,

Я изменил ComSpec в Erweiterte Systemeigenschaften->Erweitert->Umgebungsvariaben->Systemvariablen" to "C:\Windows\system32\cmd.exe и проблема была решена.

Благодаря @foxidrive и @jeb

1 ответ

Решение

Если вы используете FOR /F и получите ошибку 'something' is not recognized as an internal or external command, operable program or batch file для каждой программы, даже для внутренних команд, наиболее распространенной причиной является неправильная переменная ComSpec.

Вы можете проверить переменную с set ComSpec, так должно быть C:\Windows\System32\cmd.exe,

Это не поможет изменить переменную в командной строке, причина описана в DosTips: странное поведение ComSpec

Если переменная содержит другое значение, вы должны исправить это в

Для немецкой системы:
Erweiterte Systemeigenschaften->Erweitert->Umgebungsvariaben->Systemvariablen

Для английской системы:
Win Key+Pause Key->Advanced System Settings->Environment Variables->System Variables

Другие вопросы по тегам