hongziehong
Goto Top

Vergleich einer Zeichenfolge in zwei Dateinamen

Hallo zusammen,

ich möchte den Inhalt (ich weiß nicht, ob Variable das richtige Wort dafür wäre) zweier Dateinamen jeweils zwischen Prefix und Suffix vergleichen.
Es soll jeweils eine andere Aktion durchgeführt werden, wenn sie übereinstimmen oder auch nicht.

Der Prefix ist unterschiedlich, der Suffix nicht.
Die Dateinamen setzen sich quasi so zusammen:

Datei1: %prefix1%*%suffix%
Datei2: %prefix2%*%suffix%

Das "*" soll verglichen werden. Der Vergleichswert kommt immer aus Datei1.

Habt ihr eine Idee, wie ich es im Batch schreiben kann?
Wollte den copy-Befehl verwenden, der mir aber nicht die "Variable" kopiert, sondern einfach die ganze vorhandene Datei in den Ordner der Batchdatei setzt.

Aktuell sieht mein Versuch so aus:
for %%a in ("%path%\%prefix%*%suffix%") do (
copy %%a
:: Hier soll eigentlich mit der Zwischengespeicherten Variable verglichen werden, aber der copy Befehl kopiert nicht mal den ersten Dateinamen
)

Ich hoffe, ich habe keinen Denkfehler und hoffe auf Antworten.

Vielen lieben Dank.

LG
hongziehong

Content-Key: 326291

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

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: 77559
77559 16.01.2017 um 22:26:58 Uhr
Goto Top
Hallo honziehong,
du bleibst mit deinem Beispiel reichlich virtuell/abstrakt.

Grundsätzlich kannst du mit Variablenersetzung dein "*" extrahieren solange prefix/suffix nicht ebenfalls dadrin enthalten sind. Ist mit Suffix eigentlich die .Ext gemeint?

Vielleicht klappt dies, ungetestet (keine Lust mir ein Beispiel auszudenken):

@echo off & setlocal EnableExtensions EnableDelayedExpansion
Set Prefix=blah
Set Suffix=blubb
Set "Base=X:\path\to\somewhere\"  
PushD "%Base%"  
For %%A in ("%Prefix%*%Suffix%") Do Call :Sub "%%~nxA"  
popd
Goto :Eof
:Sub
Set "SternSuffix=%~1"  
:: Eliminiere Prefix
Set "SternSuffix=!SternSuffix:%Prefix%=!"  
Set Found=0
For %%B in ("*%SternSuffix%") Do If "%%~nxB" NEQ "%~1" (  
  Set /A Found+=1
  Set "This=%%~nxB"  
  Call Set "Prefix2=%%This:!SternSuffix!=%%"  
  Echo !Found!. Found !This! with !Prefix2!
)
Mitglied: hongziehong
hongziehong 20.01.2017 um 14:39:35 Uhr
Goto Top
Hallo LotPings,

vielen Dank für deine Antwort.
Also Prefix/Suffix sehen in etwa so aus:
Prefix: "Zertifikat-"
Suffix: "-2016.pdf"

Und genau zwischen diesen Angeben steht eine 5-stellige eindeutige Nummer, die ich extrahieren möchte.

Wird mit "For %%A in ("%Prefix%*%Suffix%") Do Call :Sub "%%~nxA" " direkt das "*" zwischen Prefix und Suffix angesprochen?

Danke dir für deine Hilfe.

VG
Mitglied: 77559
77559 20.01.2017 um 19:26:39 Uhr
Goto Top
Ein paar Infos mehr am Anfang hätten schon geholfen face-sad

Das du den variablen Teil suchst war mit nicht klar.
Hatte auch versehentlich DisableDelayedExpansion statt EnableDelayedExpansion in der batch stehen.

Diese Batchdatei
:: AD_Prefix-Suffix.cmd
@echo off & setlocal EnableExtensions EnableDelayedExpansion
Set "Prefix=Zertifikat-"  
Set "Suffix=-2016.pdf"  
Set "Base=Q:\Test\2017-01\16\"  
PushD "%Base%"  
For %%A in ("%Prefix%*%Suffix%") Do Call :Sub "%%~nxA"  
PopD
Goto :Eof
:Sub
Set "SternSuffix=%~1"  
:: Eliminiere Prefix
Set "SternSuffix=!SternSuffix:%Prefix%=!"  
Set "Stern=!SternSuffix:%Suffix%=!  
Set Found=0
For %%B in ("*%SternSuffix%") Do If "%%~nxB" NEQ "%~1" (  
  Set /A Found+=1
  Set "This=%%~nxB"  
  Call Set "Prefix2=%%This:!SternSuffix!=%%"  
  Echo !Found!. Found %Stern% in %~1 und %%B mit Prefix2 !Prefix2!
)
Erzeugt mit diesen Dateien:
> dir /b *.pdf
Ganzwasneues-123456-2016.pdf
Wasanderes123456-2016.pdf
Zertifikat-123456-2016.pdf
Diese Ausgabe:
> AD_Prefix-Suffix.cmd
1. Found 123456 in Zertifikat-123456-2016.pdf und Wasanderes123456-2016.pdf mit Prefix2 Wasanderes
2. Found 123456 in Zertifikat-123456-2016.pdf und Ganzwasneues-123456-2016.pdf mit Prefix2 Ganzwasneues-