Trong tập lệnh bó làm thế nào để lặp qua các khóa phụ đăng ký


1

Từ cửa sổ đăng ký, tôi có thể lấy danh sách phiên bản java được cài đặt trên hệ thống của mình bằng mã bên dưới. Nhưng làm thế nào để lặp qua danh sách và lưu trữ nhà Java trong một mảng?

@ECHO OFF
REG QUERY "HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit" /S
PAUSE

Đầu ra như sau:

output
-----------
D:\ITM\configuration 
experience\apm_datacollectors_win_8.1.4.0\j2se_datacollecto
r_win_8.1.4.0\j2sedc\.gdc\7.3.0.5.0\bin>config.bat

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit
CurrentVersion    REG_SZ    1.8

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.7
JavaHome    REG_SZ    C:\Program Files\jdk1.7.0_79
MicroVersion    REG_SZ    0

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.7.0_79
JavaHome    REG_SZ    C:\Program Files\jdk1.7.0_79
MicroVersion    REG_SZ    0

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.8
JavaHome    REG_SZ    C:\Program Files\Java\jdk1.8.0_121
MicroVersion    REG_SZ    0

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.8.0_121
JavaHome    REG_SZ    C:\Program Files\Java\jdk1.8.0_121
MicroVersion    REG_SZ    0

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\1.8.0_121\MSI
INSTALLDIR    REG_SZ    C:\Program Files\Java\jdk1.8.0_121\
NOSTARTMENU    REG_SZ    0

Press any key to continue . . .

Chính xác thì bạn đang cố gắng thực hiện điều gì - đó là lý do tại sao bạn nghĩ rằng bạn cần một mảng với các JavaHomegiá trị khác nhau ? Batch không hỗ trợ mảng; bạn có thể cần phải xem xét các công cụ khác. Chúng tôi có thể tư vấn tốt hơn cho bạn nếu bạn có thể làm rõ nhu cầu của bạn là gì.
Jeff Zeitlin

@JeffZeitlin Mảng không có nguồn gốc từ các tệp bó nhưng có thể dễ dàng thực hiện - một tập lệnh Windows CMD để đếm tệp và nhận tên tệp
DavidPostill

Câu trả lời:


1

Không có thứ gọi là mảng trong MS-DOS, nhưng bạn có thể lặp qua các kết quả và nhận các giá trị cho JavaHome như thế này:

for /f "tokens=3* usebackq" %%a in (`reg query "HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit" /S ^| find "JavaHome"`) do (
    echo %%a %%b
)

Mảng không có nguồn gốc từ các tệp bó nhưng có thể dễ dàng thực hiện - một tập lệnh Windows CMD để đếm tệp và nhận tên tệp
DavidPostill

@Berend: Cảm ơn, vòng lặp for mà bạn đã chia sẻ ở trên hoạt động tốt và trả về kết quả. Trong đó cho vòng lặp %% a là biến lưu trữ giá trị sau khi lặp? Sự hiểu biết của tôi có đúng không và sau đó %% b là gì?
Amit

Nếu đường dẫn chứa một khoảng trắng, hai biến được đặt, biến thứ hai (%% b) sẽ chứa mọi thứ sau khoảng trắng đầu tiên. gõ help forvào một dấu nhắc lệnh để có được một lời giải thích về tokens=3*tùy chọn.
Berend

0

Trước hết cảm ơn câu trả lời và làm cho tôi (một nhà phát triển java) biết rằng các mảng không được hỗ trợ trong tập lệnh bó :-)

Những gì tôi muốn thực hiện? -> Tôi đang làm việc trên một đại lý giám sát, hiện đang cung cấp cho khách hàng dưới dạng tệp zip. Khách hàng giải nén nó và chạy tệp config.bat để định cấu hình tác nhân trên máy của nó. Cấu hình này.bat yêu cầu người dùng nhập JAVA_HOME (thư mục nơi java được cài đặt trong máy khách hàng), vì tác nhân dựa trên java. Nhiệm vụ của tôi là nâng cao trải nghiệm khách hàng này bằng cách tự động tìm kiếm bất kỳ java nào được cài đặt trong máy của anh ấy và không yêu cầu khách hàng thực sự nhập JAVA_HOME.

Bây giờ, một trường hợp sử dụng là chỉ có một phiên bản Java được cài đặt trong máy khách hàng. Sau đó tập lệnh config.bat nên đọc mục java đó từ sổ đăng ký windows. Nhưng nếu có nhiều phiên bản java được cài đặt trong máy khách hàng thì sao? Trong trường hợp như vậy tôi sẽ phải cho khách hàng thấy rằng anh ta có nhiều phiên bản java trong máy của mình và anh ta có thể chọn một trong số đó để cài đặt tác nhân.

@Berend: Cảm ơn, vòng lặp for mà bạn đã chia sẻ ở trên hoạt động tốt và trả về kết quả như bên dưới. Trong đó cho vòng lặp %% a là biến lưu trữ giá trị sau khi lặp? Sự hiểu biết của tôi có đúng không và sau đó %% b là gì?

D:\ITM\configuration 
experience\apm_datacollectors_win_8.1.4.0\j2se_datacollecto
r_win_8.1.4.0\j2sedc\.gdc\7.3.0.5.0\bin>config.bat
C:\Program Files\jdk1.7.0_79
C:\Program Files\jdk1.7.0_79
C:\Program Files\Java\jdk1.8.0_121
C:\Program Files\Java\jdk1.8.0_121
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.