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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 326291
Url: https://administrator.de/forum/vergleich-einer-zeichenfolge-in-zwei-dateinamen-326291.html
Ausgedruckt am: 12.04.2025 um 04:04 Uhr
3 Kommentare
Neuester Kommentar

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):
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!
)

Ein paar Infos mehr am Anfang hätten schon geholfen 
Das du den variablen Teil suchst war mit nicht klar.
Hatte auch versehentlich DisableDelayedExpansion statt EnableDelayedExpansion in der batch stehen.
Diese Batchdatei
Erzeugt mit diesen Dateien:
Diese Ausgabe:
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!
)
> dir /b *.pdf
Ganzwasneues-123456-2016.pdf
Wasanderes123456-2016.pdf
Zertifikat-123456-2016.pdf
> 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-