Top-Themen

Aktuelle Themen (A bis Z)

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

Batch dynamischer Stringvergleich möglich ?

Frage Entwicklung Batch & Shell

Mitglied: listigerTeppich

listigerTeppich (Level 1) - Jetzt verbinden

13.11.2009 um 11:05 Uhr, 7286 Aufrufe, 9 Kommentare

Hallo beisammen,

Ich schreibe an einer Batch Datei und habe mir folgendes "Feature" überlegt:

Das Skript soll Zeichenketten von Dateien Vergleichen. Stimmen 2 Dateien überein so sollen die Dateinamen in ein Logfile geschrieben werden.

Die beiden Dateinamen sind beispielsweise wie folgt aufgebaut :

Datei 1:

KR12312342314.txt

Datei2:

UE12312342314.txt

Ziel ist es also innerhalb eines Ordners jeweils die "Dateipaare" zu finden bei denen lediglich die Zahlenreihe exakt übereinstimmt.

Man müsste quasi den Dateinamensstring zwischen den führenden 2 Buchstaben und dem Punkt des Suffix auslesen und vergleichen. Hat von euch einer eine Idee ob bzw. wie das in einer Batch umzusetzen ist?



Grüße
Mitglied: bastla
13.11.2009 um 11:22 Uhr
Hallo listiger Teppich!

Ganz grundsätzlich: Um Substrings bilden zu können, müssen die Dateinamen in "gewöhnlichen" Variablen (also nicht Laufvariablen wie %%i oder Parametervariablen wie %1) gespeichert sein - für die Variablen %Dateiname1% und %Dateiname2% dann etwa so:
if /i "%Dateiname1:~2%"=="%Dateiname1:~2%" echo Uebereinstimmung: %Dateiname1%_%Dateiname2%
Mehr dazu in der Onlinehilfe (Aufruf mit "set /?") ...

Grüße
bastla
Bitte warten ..
Mitglied: listigerTeppich
13.11.2009 um 12:02 Uhr
ah, danke schonma. Ich hab noch vergessen explizit zu erwähnen, dass die Formate der Dateien variieren können. Kann man das auch noch abfangen?
Bitte warten ..
Mitglied: bastla
13.11.2009 um 15:00 Uhr
Hallo listiger Texppich!

Um einen ganzen Ordner auszuwerten (woher die Dateinamen stammen, hast Du ja bisher leider nicht beschrieben), könnte der Batch etwa so aussehen:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Test" 
03.
set "Erg=D:\Ergebnis.txt" 
04.
set "Delim=_" 
05.
 
06.
pushd "%Ordner%" 
07.
copy nul "%Erg%">nul 
08.
for /f "delims=" %%i in ('dir /b /a-d') do findstr /i /c:"%%i" "%Erg%">nul || call :ProcessFile "%%i" 
09.
popd 
10.
goto :eof 
11.
 
12.
:ProcessFile 
13.
set "Name=%~n1" 
14.
::Falls nur eine Datei zu erwarten ist: nur eine Ausgabezeile 
15.
for /f "delims=" %%i in ('dir /b "??%Name:~2%.*" 2^>nul ^|findstr /v /i /c:%1') do >>"%Erg%" echo %~1%Delim%%%i 
16.
::Falls mehrere Dateien: mehrere Ausgabezeilen 
17.
::dir /b "??%Name:~2%.*" 2^>nul |findstr /v /i /c:%1 >nul && (dir /b "??%Name:~2%.*" & echo\)>>"%Erg%" 
18.
goto :eof
Für den Fall, dass nicht nur von zwei "passenden" Dateien auszugehen wäre, könntest Du die Zeile 15 durch das voranstellen von "::" deaktivieren und stattdessen die Zeile 17 (durch Entfernen der Kommentarzeichen "::") verwenden.

Grüße
bastla
Bitte warten ..
Mitglied: 5t8d1e
13.11.2009 um 15:10 Uhr
Hallo,

hier ganz "simpel" in Powershell

01.
$a = "KR12312342314.txt" 
02.
$b = "UE12312342314.txt" 
03.
$c = $a.IndexOfAny(".")-2 
04.
$d = $a.Substring(2,$c) 
05.
 
06.
$b -match $d
und hier in Batch
01.
SET d1=KR12312342314.txt 
02.
SET d2=UE12312342314.txt 
03.
for  %%a in (%d1%) do set b=%%~na 
04.
for  %%c in (%d2%) do set d=%%~nc 
05.
set e=%b:~2% 
06.
set f=%d:~2% 
07.
 
08.
if %e%==%f% (Echo True) Else (Echo False)
Torsten
Bitte warten ..
Mitglied: listigerTeppich
16.11.2009 um 11:40 Uhr
Danke an euch beide. Die Lösung von Bastla ist exakt das wonach ich gesucht habe. echt Super ! Eine kleine Frage(-erweiterung) habe ich jedoch noch. Wie kann ich es umsetzten, dass nicht wie angenommen ein einzelner Ordner ausgewertet werden soll sondern 2 verschiedene. Die beiden verschiedenen Dateien würden also jeweils in einem anderen Ordner liegen. In den beiden Ordnern liegen jeweils mehrere Dateien.

Evtl. kurz zur Hintergrunderklärung: Wir bekommen mehrere Nachrichten mit signierten Anhängen. Die signierte Protokolldatei einer Datendatei wird separat mitgeschickt und automatisiert in einen Protokoll-Ordner abgelegt. Ziel ist nun die Ausgabe einer Liste von Dateipaaren, welche die Anforderung erfüllen, dass die Datendatei (in Ordner A) sowie auch die Protokolldatei (in Ordner B) vorhanden ist.
Die Zuordnung einer Datei zur jeweiligen Protokolldatei funktioniert mit Bastlas-skript, für den Fall dass sich beide Dateien im selben Ordner befinden, schon tadellos. Weiss jemand vl. wie man noch die verschiedenen Eingangsordner gehandelt bekommt ?
Bitte warten ..
Mitglied: bastla
16.11.2009 um 14:58 Uhr
Hallo listiger Teppich!

Das sollte dann etwa so zu machen sein:
01.
@echo off & setlocal 
02.
set "Ordner1=D:\Test" 
03.
set "Ordner2=D:\Sigs" 
04.
set "Erg=D:\Ergebnis.txt" 
05.
set "Delim=_" 
06.
 
07.
for /f "delims=" %%i in ('dir /b /a-d') do call :ProcessFile "%%i" 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
set "Name=%~n1" 
12.
::Falls nur eine Datei zu erwarten ist: nur eine Ausgabezeile 
13.
for /f "delims=" %%i in ('dir /b "%Ordner2%\??%Name:~2%.*" 2^>nul ^|findstr /v /i /c:%1') do >>"%Erg%" echo %~1%Delim%%%i 
14.
::Falls mehrere Dateien: mehrere Ausgabezeilen 
15.
::dir /b "%Ordner2%\??%Name:~2%.*" 2^>nul |findstr /v /i /c:%1 >nul && (dir /b "%Ordner2%\??%Name:~2%.*" & echo\)>>"%Erg%" 
16.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: listigerTeppich
18.11.2009 um 12:07 Uhr
Hallo Bastla !

ja, das funktioniert schon echt gut, nur wird dann bei dieser Umsetzung das logfile (%logdir%\log.txt) gar nicht aufgerufen:

for /f "delims=" %%i in ('dir /b /a-d %protdir%\UE*') do call :ProcessFile "%%i"
goto :eof

:ProcessFile
set "Name=%~n1"
dir /b "%datadir%\??%Name:~2%.*" 2^>nul |findstr /v /i /c:%1 >nul && (dir /b "%datadir%\??%Name:~2%.*" & echo\)>> %logdir%\log.txt
goto :eof

echo Skript beendet am %date:~0% - %time:~0,8% Uhr >> %logdir%\log.txt

cd %logdir%
log.txt

wenn ich beide "goto :eof" auskommentiere wird das logfile (%logdir%\log.txt) für jedes gefundene Dateienpaar separat aufgerufen. Kannst du mir evtl. noch sagen wie ich es hinbekomme, dass das logfile erst aufgerufen wird wenn der Unterprozess ":ProcesFile" komplett durchgelaufen ist ?
Bitte warten ..
Mitglied: bastla
18.11.2009 um 13:26 Uhr
Hallo listiger Teppich!

Da das Script mit dem ersten "goto :eof" endet (danach folgt nur noch ein Unterprogramm), brauchst Du eigentlich nur unmittelbar davor die Zeile
"%logdir%\log.txt"
einzufügen.

Grüße
bastla

P.S.: Bitte zum Posten von Code die passende Formatierung verwenden ...
Bitte warten ..
Mitglied: listigerTeppich
18.11.2009 um 14:17 Uhr
ah, sehr schön. Problem gelöst, Danke !
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Dynamischer Bericht in Access, ist das möglich?
gelöst Frage von Dr.CornwallisMicrosoft Office9 Kommentare

Liebe Gemeinde, Ich habe in Access einen Table, dieser beinhaltet Benutzerdaten und das Datum(täglich bis Jahresende). Nun habe ich ...

Batch & Shell
Ist das mit Batch möglich?
Frage von it-froschBatch & Shell2 Kommentare

Hallo Kollegen, Ich habe hier zwei Verzeichnisstrukturen nach dem Muster: Name Hauptverzeichnis, 1234 wobei die Strukturen sich nur im ...

Verschlüsselung & Zertifikate
Ist es möglich mit dynamische IP-Adresse VPN einzurichten?
gelöst Frage von tuna2015Verschlüsselung & Zertifikate5 Kommentare

Guten Abend zusammen, kann mir jemand mitteilen ob es mit Fritzbox 7362 SL von 1&1 (dynamische IP Adressen) eine ...

Batch & Shell
Dynamisches Script
Frage von TommyDerWalkerBatch & Shell1 Kommentar

Hallo zusammen, vllt könnt ihr mir helfen! Ich habe eine VM als Dienst eingerichtet, und da ich das in ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 106 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless8 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing7 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...