Mengambil variabel registri dalam skrip batch

1

Saya ingin menulis skrip batch (windows XP) yang mengekstrak jalur instalasi tertentu dari registri.

Bagaimana orang menulis naskah seperti itu?

Saya telah menulis yang berikut ini - saya (seperti yang Anda lihat dari contoh saya di bawah) seorang programmer, tetapi sebenarnya tidak tahu apa-apa tentang skrip batch. komentar di bawah ini juga dihargai:

@echo off

set Count=0
for %%a in (%*) do set /a Count+=1

if %Count% GEQ 3 goto :error
if %Count% EQU 1 goto :SET_FOUND_JAVA
if %Count% EQU 2 goto :SET_FOUND_NSIS
if %Count% EQU 0 goto :MUST_CALULATE

:SET_FOUND_JAVA
set tmp_java=%1
goto :FOUND_JAVA

:SET_FOUND_NSIS
set tmp_java=%1
set tmp_nsis=%2
goto :FOUND_NSIS

:MUST_CALULATE
For /F "tokens=*" %%I in ('REG QUERY "HKLM\SOFTWARE\JavaSoft\Java Development Kit\1.6" /v JavaHome') Do Call :PARSE_JAVA %%I
GoTo :CALCULATED_JAVA
:PARSE_JAVA
If "%1"=="" GoTo :EOF
set java_location=%1
Shift
GoTo :PARSE_JAVA

:FOUND_JAVA
set java_location=%tmp_java%

:CALCULATED_JAVA
set JAVA_HOME=%java_location%

For /F "tokens=4* skip=2" %%I in ('REG QUERY HKLM\SOFTWARE\NSIS /ve') Do Call :PARSE_NSIS %%I
GoTo :CALCULATED_NSIS
:PARSE_NSIS
If "%1"=="" GoTo :EOF
set nsis_location=%1
Shift
GoTo :PARSE_NSIS

:FOUND_NSIS
set java_location=%tmp_java%
set nsis_location=%tmp_nsis%
:CALCULATED_NSIS
set JAVA_HOME=%java_location%
set NSIS_DIR=%nsis_location%


Echo JAVA Home found at %JAVA_HOME%
Echo NSIS Home found at %NSIS_DIR%



mvn -P package -Dnsis.dir=%NSIS_DIR% clean package

go end

:error
echo USAGE %0
echo USAGE %0 [JAVA_HOME]
echo USAGE %0 [JAVA_HOME] [NSIS_HOME]
:end

EDIT 1:

Menjalankannya di komputer saya menghasilkan yang berikut:

JAVA Home found at P:\Java\jdk1.6.0_20
NSIS Home found at P:\NSIS

Sedangkan menjalankannya di komputer lain menghasilkan:

JAVA Home found at Files\Java\jdk1.6.0_18
NSIS Home found at

Ini karena perintah:

REG QUERY "HKLM\SOFTWARE\JavaSoft\Java Development Kit\1.6" /v JavaHome

Menghasilkan:

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.6
    JavaHome    REG_SZ  C:\Program Files\Java\jdk1.6.0_18
Yaneeve
sumber
Kode di atas hanya berfungsi ketika jalur instalasi tidak memiliki spasi di dalamnya
Yaneeve
Anda sepertinya telah menjawab pertanyaan Anda sendiri. Apakah kode Anda tidak berfungsi? Apa fungsinya? Bisakah Anda mengajukan pertanyaan dengan cara yang berbeda?
boot13
@ boot13 - silakan lihat edit yang ditambahkan
Yaneeve