Mehrere Bedingungen mit If Abfragen und in eine Variable schreiben
Hallo zusammen... ich mal wieder...
Ich möchte folgendes erreichen...
innerhalb eines bestehenden Scripts soll aus einer Config.ini ein bevorzugter Packer ausgelesen werden.
Außerdem wird aus der gleichen Config.ini ein Wert ausgelesen, ob die zu packende Datei gesplittet werden soll.
Mein Problem ist nun folgendes:
Es sollen 2 Bedingungen Erfüllt sein, um einen Wert in eine Variable zu schreiben.
z.B.
1. Wenn Packer 7Zip (in Variable %Packer%) ausgewählt ist, und der Wert "Ja" für Splitten der Datei gewählt ist, soll die Variable %PackParam% den Wert "a -v4g -p%ArcPW% -tzip -mx0 -r" enthalten.
2. Wenn Packer 7Zip (in Variable %Packer%) ausgewählt ist, und der Wert "Nein" für Splitten der Datei gewählt ist, soll die Variable %PackParam% den Wert "a -p%ArcPW% -tzip -mx0 -r" enthalten.
allerdings hat der AW die Wahl zwischen 3 Packern: 7Zip, Rar und WinZip. d.h. der ganze Spass muß 3 x abgefragt werden, je nach dem, welcher Packer gewählt ist.
Außerdem wird dann auch noch getestet, wie groß die Datenmenge ist, die gepackt werden soll. (Ist die Datenmenge Größer als 4 GB, Splitte das Archiv, sonst nicht)
Und Davon abhängig soll die jeweils richtige Befehlszeile ausgeführt werden.
Hier mein Ansatz dazu....
Was ich also nicht hin bekomme ist folgende Auswertung:
Wenn Packer (%IPacker%)= 7Zip und Splitten (%Pvol%) = Ja - Goto :Packe4GB
Wenn aber Packer = 7Zip und Splitten gleich Nein Goto PackeNormal
Oder ist doch einer der anderen Packer ausgewählt? Dann Nutze anderen Packer und andere Parameter und Triff die richtige Wahl 4GB oder weniger...
Bin euch Dankbar für eure Vorschläge....
Ist doch sicher mal wieder eine nette Herausforderung. Oder sehe ich nur den Wald vor lauter Bäumen nicht?
Gruß CCED (Markus)
Ich möchte folgendes erreichen...
innerhalb eines bestehenden Scripts soll aus einer Config.ini ein bevorzugter Packer ausgelesen werden.
Außerdem wird aus der gleichen Config.ini ein Wert ausgelesen, ob die zu packende Datei gesplittet werden soll.
Mein Problem ist nun folgendes:
Es sollen 2 Bedingungen Erfüllt sein, um einen Wert in eine Variable zu schreiben.
z.B.
1. Wenn Packer 7Zip (in Variable %Packer%) ausgewählt ist, und der Wert "Ja" für Splitten der Datei gewählt ist, soll die Variable %PackParam% den Wert "a -v4g -p%ArcPW% -tzip -mx0 -r" enthalten.
2. Wenn Packer 7Zip (in Variable %Packer%) ausgewählt ist, und der Wert "Nein" für Splitten der Datei gewählt ist, soll die Variable %PackParam% den Wert "a -p%ArcPW% -tzip -mx0 -r" enthalten.
allerdings hat der AW die Wahl zwischen 3 Packern: 7Zip, Rar und WinZip. d.h. der ganze Spass muß 3 x abgefragt werden, je nach dem, welcher Packer gewählt ist.
Außerdem wird dann auch noch getestet, wie groß die Datenmenge ist, die gepackt werden soll. (Ist die Datenmenge Größer als 4 GB, Splitte das Archiv, sonst nicht)
Und Davon abhängig soll die jeweils richtige Befehlszeile ausgeführt werden.
Hier mein Ansatz dazu....
:: Variablen setzen
:: Diese Wird aus der Config.Ini abgefragt
::
: Packer wählen
Set "IPacker =7Zip"
:Splitten bei mehr als 4 GB Daten
Set "Pvol=Ja"
if %IPacker% EQU 7Zip goto Config7Zip
if %IPacker% EQU rar goto ConfigRar
if %IPacker% EQU WinZip goto ConfigWinZip
:Config7Zip
:: Hier wird der oben ausgewählte Packer auf der Platte gesucht.
:: Und der Pfad samt EXE in die Variable %Packer% geschrieben
Echo suche 7Zip - Bitte etwas Gedult...
SET "SPack=7z.exe"
IF not defined Packer FOR /F "delims=" %%i in ('dir /b /s "%ProgramFiles%\%SPack%" ^2^>Nul') do Set "Packer=%%~dpi7z.exe"
If not defined Packer (
IF not defined Packer FOR /F "delims=" %%i in ('dir /b /s "%ProgramFiles(x86)%\%SPack%" ^2^>Nul') do Set "Packer=%%~dpi7z.exe"
) ELSE (
echo 4GBSplit: %Pvol%
if %Pvol% EQU Nein set "PackParam=a -p%ArcPW% -tzip -mx0 -r"
if %Pvol% EQU Ja set "PackParam=a -v4g -p%ArcPW% -tzip -mx0 -r"
echo %PackParam%
Pause
Goto :PackFile
)
:ConfigRar
:: Hier wird der oben ausgewählte Packer auf der Platte gesucht.
:: Und der Pfad samt EXE in die Variable %Packer% geschrieben
Echo suche RAR - Bitte etwas Gedult...
SET "SPack=rar.exe"
IF not defined Packer FOR /F "delims=" %%i in ('dir /b /s "%ProgramFiles%\%SPack%" ^2^>Nul') do Set "Packer=%%~dpirar.exe"
If not defined Packer (
IF not defined Packer FOR /F "delims=" %%i in ('dir /b /s "%ProgramFiles(x86)%\%SPack%" ^2^>Nul') do Set "Packer=%%~dpirar.exe"
) ELSE (
echo RAR gefunden in "%Packer%"
if %Pvol% EQU Nein set "PackParam=a -p%ArcPW% -tzip -mx0 -r"
if %Pvol% EQU ja set "PackParam=a -v4g -p%ArcPW% -tzip -mx0 -r"
Goto :PackFile
)
:ConfigWinZip
:: Hier wird der oben ausgewählte Packer auf der Platte gesucht.
:: Und der Pfad samt EXE in die Variable %Packer% geschrieben
Echo suche WinZip32 - Bitte etwas Gedult...
SET "SPack=winzip32.exe"
IF not defined Packer FOR /F "delims=" %%i in ('dir /b /s "%ProgramFiles(x86)%\%SPack%" ^2^>Nul') do Set "Packer=%%~dpiwinzip32.exe"
If not defined Packer (
echo suche in 32Bit
IF not defined Packer FOR /F "delims=" %%i in ('dir /b /s "%ProgramFiles(x86)%\%SPack%" ^2^>Nul') do Set "Packer=%%~dpiwinzip32.exe"
) ELSE (
echo WinZip gefunden in "%Packer%"
Goto :PackFile
)
:PackFile
set "Drive=%Startdir:~,2%"
%Drive%
cd %StartDIR%
set Ordner=%~1
cd "%Ordner%"
if exist *.!UT (
cd %startdir%
goto :eof)
:: Hier wird die zu Packende Datenmenge berechnet
Set PackFile="%startdir%%ordner%"
for /f "tokens=3" %%i in ('dir "%PackFile%" /s /-c^|findstr /c:" Datei(en)"^|findstr /e /c:" Bytes"') do set "DirSize=%%i"
if %DirSize% gtr 999999 (set "over=%DirSize:~0,-6%" && set "under=%DirSize:~6%") else goto :PackeNormal
if %over% equ 4294 if 1%under% gtr 1967296 goto :Packe4GB
if %over% gtr 4294 goto :Packe4GB
goto :PackeNormal
:Packe4GB
:: Ab hier soll gepackt werden. Bei einer Datenmenge von mehr als 4 GB
echo Packe groesser als 4 GB
"%Packer%" %PackParam% %Ordner%.zip
echo 1>%Startdir%%Ordner%\!Erledigt.DoNot.!UT
goto PackEnd
:PackeNormal
:: Ab hier soll gepackt werden. Bei einer Datenmenge von weniger als 4 GB
echo Packe kleiner oder gleich 4 GB
"%Packer%" %PackParam% %Ordner%.zip
echo 1>%Startdir%%Ordner%\!Erledigt.DoNot.!UT
echo ! - %Date% - %Time%: %Ordner%.zip erstellt.>>%SLOG%
goto PackEnd
:PackEnd
Was ich also nicht hin bekomme ist folgende Auswertung:
Wenn Packer (%IPacker%)= 7Zip und Splitten (%Pvol%) = Ja - Goto :Packe4GB
Wenn aber Packer = 7Zip und Splitten gleich Nein Goto PackeNormal
Oder ist doch einer der anderen Packer ausgewählt? Dann Nutze anderen Packer und andere Parameter und Triff die richtige Wahl 4GB oder weniger...
Bin euch Dankbar für eure Vorschläge....
Ist doch sicher mal wieder eine nette Herausforderung. Oder sehe ich nur den Wald vor lauter Bäumen nicht?
Gruß CCED (Markus)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 168543
Url: https://administrator.de/contentid/168543
Ausgedruckt am: 23.11.2024 um 07:11 Uhr
4 Kommentare
Neuester Kommentar
Aloha,
*gähn* ich geh schlafen aber bring dir noch eine Kettensäge vorbei und 'nen Hinweis à la
usw. das kannst du ja noch ein bisschen erweitern und rumgähnentesten,
ich geh schlafen
gute Nacht
*gähn* ich geh schlafen aber bring dir noch eine Kettensäge vorbei und 'nen Hinweis à la
if "%IPacker%"=="7zip" (if "%Pvol%"=="Ja" goto :Packe4GB) else (if "%IPacker%"=="7zip" (if "%Pvol%"=="Nein" goto :PackeNormal))
usw. das kannst du ja noch ein bisschen erweitern und rum
ich geh schlafen
gute Nacht
Hallo cced-de!
Ich habe das ganze mal etwas begradigt (aber nicht getestet):
Grüße
bastla
Ich habe das ganze mal etwas begradigt (aber nicht getestet):
:: Variablen setzen
:: Diese Wird aus der Config.Ini abgefragt
::
:: Packer wählen
set "IPacker=7Zip"
:: Splitten bei mehr als 4 GB Daten
set "Pvol=Ja"
:: Variable Packer löschen
set "Packer="
if /i "%IPacker%"=="7Zip" goto :Config7Zip
if /i "%IPacker%"=="rar" goto :ConfigRar
if /i "%IPacker%"=="WinZip" goto :ConfigWinZip
echo "%IPacker%" nicht zuordenbar!
goto :eof
:Config7Zip
:: Hier wird der oben ausgewählte Packer auf der Platte gesucht.
:: Und der Pfad samt EXE in die Variable %Packer% geschrieben
echo suche 7Zip - Bitte etwas Geduld...
set "SPack=7z.exe"
if not defined Packer for /f "delims=" %%i in ('dir /b /s "%ProgramFiles%\%SPack%" 2^>nul') do set "Packer=%%~i"
if not defined Packer for /f "delims=" %%i in ('dir /b /s "%ProgramFiles(x86)%\%SPack%" 2^>nul') do set "Packer=%%~i"
if not defined Packer (
echo "%SPack%" nicht gefunden!
goto :eof
)
echo 4GBSplit: %Pvol%
set "PackParam=a -p%ArcPW% -tzip -mx0 -r"
if /i "%Pvol%"=="Ja" set "PackParam=a -v4g -p%ArcPW% -tzip -mx0 -r"
echo %PackParam%
pause
goto :PackFile
:ConfigRar
:: Hier wird der oben ausgewählte Packer auf der Platte gesucht.
:: Und der Pfad samt EXE in die Variable %Packer% geschrieben
echo suche RAR - Bitte etwas Geduld...
set "SPack=rar.exe"
if not defined Packer for /f "delims=" %%i in ('dir /b /s "%ProgramFiles%\%SPack%" 2^>nul') do set "Packer=%%~i"
if not defined Packer for /f "delims=" %%i in ('dir /b /s "%ProgramFiles(x86)%\%SPack%" 2^>nul') do set "Packer=%%~i"
if not defined Packer (
echo "%SPack%" nicht gefunden!
goto :eof
)
echo RAR gefunden in "%Packer%"
set "PackParam=a -p%ArcPW% -tzip -mx0 -r"
if /i "%Pvol%"=="ja" set "PackParam=a -v4g -p%ArcPW% -tzip -mx0 -r"
goto :PackFile
:ConfigWinZip
:: Hier wird der oben ausgewählte Packer auf der Platte gesucht.
:: Und der Pfad samt EXE in die Variable %Packer% geschrieben
echo suche WinZip32 - Bitte etwas Geduld...
set "SPack=winzip32.exe"
if not defined Packer for /f "delims=" %%i in ('dir /b /s "%ProgramFiles%\%SPack%" 2^>nul') do set "Packer=%%~i"
if not defined Packer for /f "delims=" %%i in ('dir /b /s "%ProgramFiles(x86)%\%SPack%" 2^>nul') do set "Packer=%%~i"
if not defined Packer (
echo "%SPack%" nicht gefunden!
goto :eof
)
echo WinZip gefunden in "%Packer%"
goto :PackFile
:PackFile
cd /d "%Startdir%"
set "Ordner=%~1"
cd "%Ordner%"
if exist *.!UT (
cd "%startdir%"
goto :eof
)
:: Hier wird die zu packende Datenmenge berechnet
set "PackFile=%Startdir%%Ordner%"
for /f "tokens=3" %%i in ('dir "%PackFile%" /s /-c^|findstr /c:" Datei(en)"^|findstr /e /c:" Bytes"') do set "DirSize=%%i"
if %DirSize% gtr 999999 (set "over=%DirSize:~0,-6%" && set "under=%DirSize:~6%") else goto :PackeNormal
if %over% equ 4294 if 1%under% gtr 1967296 goto :Packe4GB
if %over% gtr 4294 goto :Packe4GB
goto :PackeNormal
:Packe4GB
:: Ab hier soll gepackt werden. Bei einer Datenmenge von mehr als 4 GB
echo Packe groesser als 4 GB
"%Packer%" %PackParam% "%Ordner%.zip"
>"%Startdir%%Ordner%\!Erledigt.DoNot.!UT" echo 1
goto :PackEnd
:PackeNormal
:: Ab hier soll gepackt werden. Bei einer Datenmenge von weniger als 4 GB
echo Packe kleiner oder gleich 4 GB
"%Packer%" %PackParam% "%Ordner%.zip"
>"%Startdir%%Ordner%\!Erledigt.DoNot.!UT" echo 1
>>%SLOG% echo ! - %Date% - %Time%: %Ordner%.zip erstellt.
goto :PackEnd
:PackEnd
bastla
Hallo cced-de!
... da ich mir das aber inzwischen näher angesehen habe, kann ich Dir auch den nötigen Anhaltspunkt liefern: Sowohl in ":Packe4GB" als auch in ":PackeNormal" werden die gleichen vorweg festgelegten Parameter (%PackParam%) verwendet.
Grüße
bastla
allerdings wird bei deiner Lösung das Berechnen der Größe der zu Packenden Daten nicht berücksichtigt.
Naja, eigentlich ist es Deine Lösung mit leichten Anpassungen ... ... da ich mir das aber inzwischen näher angesehen habe, kann ich Dir auch den nötigen Anhaltspunkt liefern: Sowohl in ":Packe4GB" als auch in ":PackeNormal" werden die gleichen vorweg festgelegten Parameter (%PackParam%) verwendet.
Grüße
bastla