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