rufio3000
Goto Top

Variable mit ungefärem Zeichensatz vergleichen

Ich würde ganz gerne eine "dynamische Variable" mit Textteilen vergleichen, die nicht exakt mit der Variablen übereinstimmen.

Hi und einen schönen guten Morgen,
habe hier schon oft Anregungen und Tipps gefunden, aber diesmal hilft wohl nur ein eigener Beitrag.

Also, mein Problem ist folgendes:

Ich lese mehrere Dateien aus einem Verzeichnis aus und lasse, per ECHO, die Dateinamen und weitere relevante Informationen in eine Textdatei ausgeben.
Das funktioniert auch alles wunderbar, allerdings schaffe ich es nicht einen Vergleich anzustellen, bei dem die "ungefären" Textteile der Variablen als TRUE angesehen werden...

Hier mal das Bisherige:
@for /F "delims=" %%i IN ('DIR %SS%\*.exe *.msi /B') DO (
@if "%%~ni" == "Name der Software OHNE Versionsnr. und u.U. mit Leerzeichen" SET "Silent=%MSI%"
@echo Filename: "{src}\%SS%\%%i"; Parameters: "%Silent%"; %RunFlags%>>Setup.txt
@pause
)

Die Variable %MSI% ist schon definiert und soll, bei Vorhandensein eines bestimmten Dateinamens bzw. Names der Software, der durch %%~ni übergeben wird, an Stelle von %Silent% verwendet werden.
Da sich die Dateienamen mit der Versionsnr. (welche ich unbedingt beibehalten will) ändern, soll der Vergleich eben nur "so in etwa" stattfinden.
Ist es irgendwie möglich dass der Vergleich TRUE ergibt, wenn 2 oder mehr übereinstimmende Textteile mit %%~ni verglichen werden?

Danke schonmal für eure Hilfe, ihr schafft das! face-smile

MfG

Rufio3K

Content-Key: 124944

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

Printed on: April 16, 2024 at 20:04 o'clock

Member: Rufio3000
Rufio3000 Sep 15, 2009 at 07:52:59 (UTC)
Goto Top
Bitte kein VB.
Würde die ganze Sache gerne per Batch lösen.
Falls dafür seperate Software benötigt wird und diese Freeware ist, würde ich das ebenfalls dulden ;)
Member: bastla
bastla Sep 15, 2009 at 08:14:22 (UTC)
Goto Top
Hallo Rufio3000!

Wenn ich "Zeichensatz" in Deinem Sinn richtig interpretiere, ist damit "Textteil" gemeint - in diesem Fall kannst Du mehrere "findstr" kombinieren, um auf eine entsprechende Anzahl an Übereinstimmungen zu prüfen - ungetestet also etwa:
@echo off & setlocal
FOR /F "delims=" %%i IN ('DIR %SS%\*.exe *.msi /B') DO (  
    echo %%i|findstr /b /i "Name">nul && echo %%i|findstr /i "der">nul && echo %%i|findstr /i "Software">nul && set "Silent=%MSI%"  
    ECHO Filename: "{src}\%SS%\%%i"; Parameters: "%Silent%"; %RunFlags%>>Setup.txt  
    PAUSE
)
Zur Info: findstr /?

Grüße
bastla

P.S.: Da ich auch "duldsam" bin face-wink , nur als Hinweis für das nächste Mal:
Member: Rufio3000
Rufio3000 Sep 15, 2009 at 08:25:06 (UTC)
Goto Top
Textteile, richtig... hab's korrigiert.

Leider funktioniert deine Variante nicht.
Die Befehle werden zwar ausgeführt, allerdings wird %Silent% nicht ersetzt, sondern bleibt weiterhin bestehen.
Also, nichts steht da wo eigentlich %SILENT% bzw. %MSI% stehen müsste...
Woran kann das liegen?
Habs auch schon mit !Silent! probiert, allerdings ebenfalls ohne Erfolg face-sad
Member: Rufio3000
Rufio3000 Sep 15, 2009 at 11:00:36 (UTC)
Goto Top
So, hab's jetzt so gelöst:

@for /F "delims=" %%i IN ('DIR %SS%\*.exe *.msi /B') DO (
ECHO %%~ni|FINDSTR /I "Name der Software" && IF %ERRORLEVEL% == 0 SET Silent=%MSI%
ECHO Filename: "{src}\%SS%\%%i"; Parameters: "!Silent!"; %RunFlags%>>Setup.iss
SET Silent=
)

Danke trotzdem für die Hilfe face-smile

MfG
Rufio3K
Member: bastla
bastla Sep 15, 2009 at 11:39:29 (UTC)
Goto Top
Hallo Rufio3000!

Sorry - hatte nicht auf die Schleife geachtet ...
Habs auch schon mit !Silent! probiert, allerdings ebenfalls ohne Erfolg face-sad
So sollte es (noch immer ungetestet) mit "!Silent!" klappen:
@echo off & setlocal enabledelayedexpansion
FOR /F "delims=" %%i IN ('DIR %SS%\*.exe *.msi /B') DO (  
    echo %%i|findstr /b /i "Name">nul && echo %%i|findstr /i "der">nul && echo %%i|findstr /i "Software">nul && set "Silent=%MSI%"  
    ECHO Filename: "{src}\%SS%\%%i"; Parameters: "!Silent!"; %RunFlags%>>Setup.txt  
    PAUSE
)
Grüße
bastla
Member: bastla
bastla Sep 15, 2009 at 11:42:58 (UTC)
Goto Top
Hallo Rufio3000!

Wenn Du nur ein einziges "findstr" verwendest und der "Name der Software" Leerzeichen enthält, wird nach jedem einzelnen Wort dieses Namens gesucht und der Errorlevel ist 0, wenn auch nur eines davon im Dateinamen enthalten ist ...

... abgesehen davon, dass Du (wegen der Schleife) !ERRORLEVEL! abfragen müsstest (daher verwende ich stattdessen auch &&).

Grüße
bastla
Member: Rufio3000
Rufio3000 Sep 15, 2009 at 11:58:02 (UTC)
Goto Top
Recht haste, habe noch ein /C: vor den Textteil gepackt und so macht's auch was es soll:

@for /F "delims=" %%i IN ('DIR %SS%\*.exe *.msi /B') DO (
ECHO %%~ni|FINDSTR /I /C:"Name der Software" && IF %ERRORLEVEL% == 0 SET Silent=%MSI%
ECHO Filename: "{src}\%SS%\%%i"; Parameters: "!Silent!"; %RunFlags%>>Setup.iss
SET Silent=
)

BTW: Irgendwie gingen die letzten Einträge bischen durchnander... siehe Timestamp; das mit !Silent! hatte ich schon so gemacht.
Also, vielen Dank für deine Hilfe face-smile

MfG
Rufio3K
Member: Rufio3000
Rufio3000 Sep 15, 2009 at 12:11:40 (UTC)
Goto Top
Ah, wusste nicht mehr genau was das && zu bedeuten hat, aber danke.