ในสคริปต์ชุดวิธีการวนซ้ำผ่านคีย์ย่อยของรีจิสทรี


1

จาก windows registry ฉันสามารถรับรายการรุ่น java ที่ติดตั้งในระบบของฉันโดยใช้รหัสด้านล่าง แต่จะวนซ้ำในรายการและเก็บ Java ไว้ในอาร์เรย์ได้อย่างไร?

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

ผลลัพธ์ดังต่อไปนี้:

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 . . .

คุณกำลังพยายามทำให้สำเร็จคืออะไรนั่นคือเหตุใดคุณคิดว่าคุณต้องการอาร์เรย์ที่มีJavaHomeค่าต่าง ๆ รุ่นที่ไม่สนับสนุนอาร์เรย์ คุณอาจต้องพิจารณาเครื่องมืออื่น ๆ เราสามารถให้คำแนะนำคุณได้ดียิ่งขึ้นหากคุณสามารถชี้แจงความต้องการของคุณได้
Jeff Zeitlin

@JeffZeitlin Array ไม่ใช่ไฟล์แบตช์ แต่สามารถนำไปใช้ได้ง่าย - ตัวอย่างสคริปต์ Windows CMD เพื่อนับจำนวนไฟล์และรับชื่อไฟล์
DavidPostill

คำตอบ:


1

ไม่มีสิ่งใดเป็นอาเรย์ใน MS-DOS แต่คุณสามารถวนซ้ำผลลัพธ์และรับค่าสำหรับ JavaHome ดังนี้:

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

อาร์เรย์ไม่ได้อยู่ในไฟล์แบตช์ แต่สามารถนำไปใช้งานได้ง่าย - ตัวอย่างสคริปต์ Windows CMD เพื่อนับไฟล์และรับชื่อไฟล์
DavidPostill

@Berend: ขอบคุณสำหรับลูปที่คุณแชร์ข้างต้นทำงานได้ดีและส่งคืนผลลัพธ์ ในนั้นสำหรับ loop %% a เป็นตัวแปรที่เก็บค่าหลังจากการวนซ้ำหรือไม่? ความเข้าใจของฉันถูกต้องแล้ว %% b คืออะไร?
Amit

หากเส้นทางมีช่องว่างมีการตั้งค่าตัวแปรสองตัวหนึ่งตัวที่สอง (%% b) จะมีทุกสิ่งหลังจากช่องว่างแรก พิมพ์help forcommand prompt เพื่อรับคำอธิบายเกี่ยวกับtokens=3*ตัวเลือก
Berend

0

ก่อนอื่นขอขอบคุณสำหรับคำตอบและทำให้ฉัน (นักพัฒนา java) ทราบว่าอาร์เรย์ไม่ได้รับการสนับสนุนในสคริปต์ชุด :-)

สิ่งที่ฉันต้องการสำเร็จ -> ฉันกำลังทำงานกับเอเจนต์การตรวจสอบซึ่งปัจจุบันให้บริการแก่ลูกค้าในรูปแบบของไฟล์ซิป ลูกค้าคลายซิปและเรียกใช้ไฟล์ config.bat เพื่อกำหนดค่าเอเจนต์บนเครื่อง config.bat นี้ขอให้ผู้ใช้ป้อน JAVA_HOME (ไดเร็กทอรีที่ติดตั้ง java ในเครื่องลูกค้า) เนื่องจากเอเจนต์ใช้ Java งานของฉันคือการปรับปรุงประสบการณ์ลูกค้านี้โดยการค้นหาจาวาที่ติดตั้งในเครื่องของเขาโดยอัตโนมัติและไม่ขอให้ลูกค้าป้อน JAVA_HOME จริง

ตอนนี้หนึ่งกรณีการใช้งานคือมีเพียงรุ่นของ Java ที่ติดตั้งในเครื่องลูกค้า จากนั้นสคริปต์ config.bat ควรอ่านรายการ java จาก windows registry แต่ถ้าหากมีการติดตั้งจาวาหลายครั้งในเครื่องลูกค้า ในกรณีเช่นนี้ฉันจะต้องแสดงให้ลูกค้าเห็นว่าเขามี Java หลายอินสแตนซ์ในเครื่องของเขาและเขาสามารถเลือกหนึ่งในนั้นสำหรับการติดตั้งตัวแทน

@Berend: ขอบคุณสำหรับลูปที่คุณแชร์ไว้ด้านบนทำงานได้ดีและส่งคืนผลลัพธ์ดังนี้ ในนั้นสำหรับ loop %% a เป็นตัวแปรที่เก็บค่าหลังจากการวนซ้ำหรือไม่? ความเข้าใจของฉันถูกต้องแล้ว %% b คืออะไร?

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.