marcimarc85
Goto Top

Vollständigen Pfad einer Variable, ohne Datei in neuer Variable schreiben

Hallo,

Da ich in letzter Zeit immer mal wieder Zertifikate umwandeln muss, wollt ich mir das ganze mittels eines kleinen BAtch Scriptes erleichtern.

Ich stehe allerdings gerade vor einem problem und zwar gebe ich zu Anfang des Scriptes das Quellzertifikat inkl. Pfad an, was ich umwandeln möchte.
Diesen Pfad, möchte ich später auch asl Output_Folder haben, für die umgewandelten Zertifikate. Ich dachte, dass bekomme ich mit %%~dp1 hin.:

@echo off
setlocal

rem Setze die Variablen
set /p PFX_FILE="Dein Zertifikat.pfx: "  
set /p PFX_PASSWORD="Dein pfx-Passwort: "  
FOR %%i IN ("%PFX_FILE%") DO set CERT_NAME=%%~ni  

set PEM_KEY_FILE=%CERT_NAME%_key.pem
set PEM_CERT_FILE=%CERT_NAME%_cert.pem
set PEM_KEYANDCERT_FILE=%CERT_NAME%_keyandcert.pem

set JKS_FILE=%CERT_NAME%.jks
set JKS_PASSWORD=%PFX_PASSWORD%
FOR %%I IN ("%PFX_FILE%") DO set OUTPUT_FOLDER=%%~dpI  



rem Schritt 1: PFX in PEM umwandeln (Key und Cert extrahieren)
pushd %~dp0\OpenSSL-Win32\bin
echo openssl pkcs12 -in %PFX_FILE% -out %OUTPUT_FOLDER%\%PEM_KEY_FILE% -nocerts -nodes -password pass:%PFX_PASSWORD%
openssl pkcs12 -in %PFX_FILE% -out %OUTPUT_FOLDER%\%PEM_CERT_FILE% -nokeys -password pass:%PFX_PASSWORD%
openssl pkcs12 -in %PFX_FILE% -out %OUTPUT_FOLDER%\%PEM_KEYANDCERT_FILE% -nodes -password pass:%PFX_PASSWORD%
popd

rem Schritt 2: Erstelle einen neuen JKS und importiere den Key und das Zertifikat
pushd %~dp0\jdk17\bin
keytool -importkeystore -srckeystore %PFX_FILE% -srcstoretype PKCS12 -destkeystore %OUTPUT_FOLDER%\%JKS_FILE% -deststoretype JKS -srcstorepass %PFX_PASSWORD% -deststorepass %JKS_PASSWORD%
popd

echo Umwandlung abgeschlossen.
pause
endlocal

Die Sache ist nur, dass mir hier als OUTPUT_FOLDER

C:\Users\Administrator\"D:\temp\Zertifikat_umwandeln\testcert\  
ausgegeben wird

Korrekt sein müsste aber
D:\temp\Zertifikat_umwandeln\testcert\


Ich finde den Fehler allerdings nicht.

Content-ID: 668043

Url: https://administrator.de/forum/vollstaendigen-pfad-einer-variable-ohne-datei-in-neuer-variable-schreiben-668043.html

Ausgedruckt am: 24.12.2024 um 18:12 Uhr

mbehrens
mbehrens 11.09.2024 um 10:35:58 Uhr
Goto Top
Zitat von @MarciMarc85:

Ich finde den Fehler allerdings nicht.

Es gibt kein ~dp1.
MarciMarc85
MarciMarc85 11.09.2024 aktualisiert um 10:44:33 Uhr
Goto Top
Da steht ja auch %%~dpI

Laut CMD Hilfe :

%* in a batch script refers to all the arguments (e.g. %1 %2 %3
%4 %5 ...)

Substitution of batch parameters (%n) has been enhanced. You can
now use the following optional syntax:

%~1 - expands %1 removing any surrounding quotes (")
%~f1 - expands %1 to a fully qualified path name
%~d1 - expands %1 to a drive letter only
%~p1 - expands %1 to a path only
%~n1 - expands %1 to a file name only
%~x1 - expands %1 to a file extension only
14260433693
Lösung 14260433693 11.09.2024 aktualisiert um 11:22:02 Uhr
Goto Top
Eleminiere die Anführungszeichen bei der Eingabe vom User.
@echo off
setlocal

rem Setze die Variablen
set /p "PFX_FILE=Dein Zertifikat.pfx: "  
set "PFX_FILE=%PFX_FILE:"=%"  
set /p "PFX_PASSWORD=Dein pfx-Passwort: "  
FOR %%i IN ("%PFX_FILE%") DO set "CERT_NAME=%%~ni"  

set "PEM_KEY_FILE=%CERT_NAME%_key.pem"  
set "PEM_CERT_FILE=%CERT_NAME%_cert.pem"  
set "PEM_KEYANDCERT_FILE=%CERT_NAME%_keyandcert.pem"  

set "JKS_FILE=%CERT_NAME%.jks"  
set "JKS_PASSWORD=%PFX_PASSWORD%"  

FOR %%I IN ("%PFX_FILE%") DO set "OUTPUT_FOLDER=%%~dpI"  

rem Schritt 1: PFX in PEM umwandeln (Key und Cert extrahieren)
pushd "%~dp0OpenSSL-Win32\bin"  
echo openssl pkcs12 -in "%PFX_FILE%" -out "%OUTPUT_FOLDER%%PEM_KEY_FILE%" -nocerts -nodes -password pass:%PFX_PASSWORD%  
openssl pkcs12 -in "%PFX_FILE%" -out "%OUTPUT_FOLDER%%PEM_CERT_FILE%" -nokeys -password pass:%PFX_PASSWORD%  
openssl pkcs12 -in "%PFX_FILE%" -out "%OUTPUT_FOLDER%%PEM_KEYANDCERT_FILE% -nodes -password pass:%PFX_PASSWORD%  
popd

rem Schritt 2: Erstelle einen neuen JKS und importiere den Key und das Zertifikat
pushd "%~dp0jdk17\bin"  
keytool -importkeystore -srckeystore "%PFX_FILE%" -srcstoretype PKCS12 -destkeystore "%OUTPUT_FOLDER%%JKS_FILE%" -deststoretype JKS -srcstorepass %PFX_PASSWORD% -deststorepass %JKS_PASSWORD%  
popd

echo Umwandlung abgeschlossen.
pause
endlocal
MarciMarc85
MarciMarc85 11.09.2024 um 11:30:30 Uhr
Goto Top
Ja was soll ich sagen? PERFEKT! Danke!
So funktionierts jetzt