2008-10-08 31 views
6

Tôi có một tập tin thực thi có sử dụng thành ngữ này (nhiều lần) để đọc một giá trị registry vào một biến môi trường:Tại sao hàng loạt tập tin thất bại khi lặp qua đầu ra lệnh?

FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName') DO SET MyVariable=%%B 

(Có một ký tự tab sau delims=)

này hoạt động tốt trên hàng ngàn máy tính của khách hàng. Nhưng trên máy tính của khách hàng (chạy Windows Server 2003, mở rộng lệnh), không thành công với 'REG QUERY' HKLM \ SOFTWARE \ Đường dẫn \ To \ Key "/ v ValueName 'không được nhận dạng như lệnh nội bộ hoặc bên ngoài, chương trình có thể hoạt động hoặc tập tin thực thi. ' Chạy lệnh "reg truy vấn" một mình hoạt động tốt. Reg.exe hiện diện trong C: \ Windows \ System32.

tôi đã có thể làm việc xung quanh vấn đề bằng cách thay đổi mã để

REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName > temp.txt 
FOR /F "tokens=2* delims= " %%A IN (temp.txt) DO SET MyVariable=%%B 

này có khách hàng và chạy, nhưng tôi muốn hiểu tại sao các vấn đề xảy ra vì vậy tôi có thể tránh nó trong tương lai .

Hơi tắt chủ đề chính - một cách trực tiếp hơn để có được giá trị đăng ký (chuỗi hoặc DWORD) vào một biến môi trường cũng sẽ hữu ích.

Trả lời

0

Nút chuyển đổi /F cần bật tiện ích mở rộng lệnh. Thông thường chúng được bật theo mặc định, nhưng tôi sẽ kiểm tra điều đó. Trên các hệ thống XP, bạn có thể bật chúng lên làm một cái gì đó giống như

cmd /e:on 

hoặc kiểm tra registry dưới

HKCU\Software\Microsoft\Command Processor\EnableExtensions 

Dunno về Windows Server.

Làm help forhelp cmd cũng có thể cung cấp một số gợi ý.

+0

Tôi đã xác minh rằng EnableExtensions đã được đặt. Tôi sẽ chỉnh sửa câu hỏi để lưu ý điều đó. –

1

tôi sẽ kiểm tra: vai trò

  1. của khách hàng trên máy tính này - được họ một admin?
  2. Reg.exe ở đâu trên hộp - có nhiều hơn một bản sao của reg.exe trong đường dẫn không?
  3. Có sự khác biệt về mặt địa phương nào trên máy của khách hàng từ các máy nơi máy này hoạt động bình thường không?

Về cơ bản, liệt kê mọi thứ khác biệt giữa máy và máy này ở nơi nó hoạt động như mong đợi. Bao gồm các gói dịch vụ, tư cách thành viên miền, v.v.

1

Ồ, điều đó thật kỳ quặc.

Nếu các lệnh giống nhau hoạt động khi được chia thành hai dòng, thì tôi đoán nó có liên quan đến cách lệnh được chạy trong một subshell trong lệnh FOR.

Nếu bạn thực sự muốn tìm ra lý do tại sao nó chết trong trường hợp cụ thể này, bạn có thể chạy các lệnh như "SET> envvars.txt" làm lệnh FOR và so sánh với trình bao phía trên.

Hoặc có thể bắt đầu đơn giản và thử chạy lệnh REG qua CMD/C để xem điều đó có làm được gì không?

Một dự đoán nhanh ở đây, giá trị của COMSPEC và SHELL là gì?

1

Tôi đã có một tình huống tương tự với điều này. Trong trường hợp của tôi nó là một giá trị xấu trong COMSPEC. Tôi đã sửa lỗi đó và tập lệnh bắt đầu hoạt động như mong đợi.

Các vấn đề liên quan