Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Variable mit ungefärem Zeichensatz vergleichen

Frage Entwicklung Batch & Shell

Mitglied: Rufio3000

Rufio3000 (Level 1) - Jetzt verbinden

15.09.2009, aktualisiert 10:54 Uhr, 3748 Aufrufe, 8 Kommentare

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!

Mit freundlichen Grüßen

Rufio3K
Mitglied: Rufio3000
15.09.2009 um 09:52 Uhr
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 ;)
Bitte warten ..
Mitglied: bastla
15.09.2009 um 10:14 Uhr
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:
01.
@echo off & setlocal 
02.
FOR /F "delims=" %%i IN ('DIR %SS%\*.exe *.msi /B') DO ( 
03.
    echo %%i|findstr /b /i "Name">nul && echo %%i|findstr /i "der">nul && echo %%i|findstr /i "Software">nul && set "Silent=%MSI%" 
04.
    ECHO Filename: "{src}\%SS%\%%i"; Parameters: "%Silent%"; %RunFlags%>>Setup.txt 
05.
    PAUSE 
06.
)
Zur Info: findstr /?

Grüße
bastla

P.S.: Da ich auch "duldsam" bin , nur als Hinweis für das nächste Mal: http://www.administrator.de/helpsystem/detail.php?idx=20#toc27
Bitte warten ..
Mitglied: Rufio3000
15.09.2009 um 10:25 Uhr
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
Bitte warten ..
Mitglied: Rufio3000
15.09.2009 um 13:00 Uhr
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

Mit freundlichen Grüßen
Rufio3K
Bitte warten ..
Mitglied: bastla
15.09.2009 um 13:39 Uhr
Hallo Rufio3000!

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:
01.
@echo off & setlocal enabledelayedexpansion 
02.
FOR /F "delims=" %%i IN ('DIR %SS%\*.exe *.msi /B') DO ( 
03.
    echo %%i|findstr /b /i "Name">nul && echo %%i|findstr /i "der">nul && echo %%i|findstr /i "Software">nul && set "Silent=%MSI%" 
04.
    ECHO Filename: "{src}\%SS%\%%i"; Parameters: "!Silent!"; %RunFlags%>>Setup.txt 
05.
    PAUSE 
06.
)
Grüße
bastla
Bitte warten ..
Mitglied: bastla
15.09.2009 um 13:42 Uhr
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
Bitte warten ..
Mitglied: Rufio3000
15.09.2009 um 13:58 Uhr
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

Mit freundlichen Grüßen
Rufio3K
Bitte warten ..
Mitglied: Rufio3000
15.09.2009 um 14:11 Uhr
Ah, wusste nicht mehr genau was das && zu bedeuten hat, aber danke.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Windows Server
AD-Berechtigungen von zwei Servern miteinander vergleichen (3)

Frage von s0m3ting zum Thema Windows Server ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...