2016-03-08 15 views
6

Tôi gặp sự cố khi thực thi một lệnh khác trong lệnh FOR trên Windows 7 Ultimate. Lệnh for là một phần của một tập tin batch và sẽ phân tích cú pháp các đầu ra của một lệnh khác.Windows Batch: Thực hiện lệnh với FOR/F - "lệnh không tìm thấy"

Thông thường đây:

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

nên thực hiện lệnh "Tasklist" và đầu ra kết quả của nó qua tiếng vang. Nhưng tôi luôn nhận được "lệnh không tìm thấy".

Tôi đã cố gắng thực thi lệnh bên ngoài vòng forloop và nó hoạt động. Tôi cũng đã thử thực hiện rất nhiều lệnh bên ngoài bên trong, nhưng mọi lệnh đều cho biết "lệnh không tìm thấy".

Tôi cũng đã thử các ví dụ về bài đăng này:

Batch: Execute command with quotes in for loop with piping to find

I `m chắc chắn

  • rằng các lệnh tồn tại
  • rằng tôi đã đọc và thực hiện quyền đối với nó
  • rằng Người dùng của tôi đang ở trong Nhóm quản trị
  • mà tôi chạy t anh ta có lệnh "Chạy với tư cách quản trị viên"

Nhưng không có gì hoạt động trong máy tính này. Các lệnh tương tự hoạt động trên một PC khác cũng đang chạy một cửa sổ 7 cuối cùng.

Vì vậy, có ai có ý tưởng có thể sai trên máy tính nơi tất cả các lệnh không được tìm thấy?

Dưới đây là ví dụ về kết quả đầu ra bảng điều khiển của tôi khi tôi dùng thử với lệnh "ls". ls.exe là một tập tin thực thi từ dự án gun4win, và nó nằm trong cùng một thư mục nơi tập tin batch của tôi đang chạy. Các cửa sổ bằng tiếng Đức, vì vậy đầu ra lỗi cũng bằng tiếng Đức.

C: \ test> 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. 

EDIT CUỐI CÙNG: Vấn đề là giá trị như sai cho biến hệ thống envoirement "ComSpec".

Tôi đã thay đổi ComSpec trong "Erweiterte Systemeigenschaften-> Erweitert-> Umgebungsvariaben-> Systemvariablen" thành "C: \ Windows \ system32 \ cmd.exe" và sự cố đã được giải quyết.

Nhờ @foxidrive và @jeb

+3

Liệu scri của bạn pt sử dụng một biến với tên 'path'? – foxidrive

+2

... hoặc 'pathext'? bạn có thể thử thực thi kịch bản trong thư mục '% SystemRoot% \ System32 \', trong đó lệnh 'tasklist' nằm ở vị trí ... – aschipfl

+0

Lệnh đó không nằm ở vị trí của lệnh. Tôi thậm chí đã thử một lệnh mà được đặt trong cùng một thư mục như batchfile của tôi. Nó nói "comand not found" cho mọi thứ. Nhưng tôi có thể thực hiện tất cả các lệnh bên ngoài của for. Chỉ trong phạm vi không có lệnh được tìm thấy – Radon8472

Trả lời

4

Nếu bạn sử dụng FOR /F và nhận được lỗi 'something' is not recognized as an internal or external command, operable program or batch file cho mỗi chương trình, thậm chí lệnh nội bộ, nguyên nhân phổ biến nhất là một biến ComSpec sai.

Bạn có thể kiểm tra biến với set ComSpec, số này phải là C:\Windows\System32\cmd.exe.

Nó sẽ không giúp thay đổi biến trên dòng lệnh, nguyên nhân được mô tả tại DosTips: ComSpec strange behaviour

Nếu biến chứa một giá trị khác nhau, bạn nên điều chỉnh này theo

Đối với một hệ thống Đức:
Erweiterte Systemeigenschaften->Erweitert->Umgebungsvariaben->Systemvariablen

Đối với một hệ thống tiếng Anh:
Win Key+Pause Key->Advanced System Settings->Environment Variables->System Variables