cced-de
Goto Top

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

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

Content-ID: 168543

Url: https://administrator.de/contentid/168543

Ausgedruckt am: 23.11.2024 um 07:11 Uhr

Skyemugen
Skyemugen 23.06.2011 um 22:19:50 Uhr
Goto Top
Aloha,

*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 rumgähnentesten,

ich geh schlafen

gute Nacht
bastla
bastla 23.06.2011 um 22:21:49 Uhr
Goto Top
Hallo cced-de!

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
Grüße
bastla
cced-de
cced-de 24.06.2011 um 00:00:53 Uhr
Goto Top
Danke für eure Antworten...
bastla, du bist natürlich mal wieder der Knaller ! face-smile Danke,

allerdings wird bei deiner Lösung das Berechnen der Größe der zu Packenden Daten nicht berücksichtigt.

Da muß ich mir noch was zu einfallen lassen. Aber trotzdem schon mal danke!!!!!

CCED (Markus)
bastla
bastla 24.06.2011 um 01:33:52 Uhr
Goto Top
Hallo cced-de!
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 ... face-wink

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