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!
MfG
Rufio3K
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!
MfG
Rufio3K
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 124944
Url: https://administrator.de/forum/variable-mit-ungefaerem-zeichensatz-vergleichen-124944.html
Ausgedruckt am: 28.04.2025 um 11:04 Uhr
8 Kommentare
Neuester Kommentar
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:
Zur Info: findstr /?
Grüße
bastla
P.S.: Da ich auch "duldsam" bin
, nur als Hinweis für das nächste Mal:
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
)
Grüße
bastla
P.S.: Da ich auch "duldsam" bin
Hallo Rufio3000!
Sorry - hatte nicht auf die Schleife geachtet ...
Grüße
bastla
Sorry - hatte nicht auf die Schleife geachtet ...
Habs auch schon mit !Silent! probiert, allerdings ebenfalls ohne Erfolg 
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
)
bastla
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)
Grüße
bastla
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