kriegstreiber
Goto Top

For Schleife - mehrere Dateinamen Teilstücke als Variable setzen

Hallo Community,

ich weiss gar nicht wie ich das in Worte fassen soll, alleine die Überschrift hat mich Minuten gekostet. Ziel ist es etwas zu sortieren. Alle Dateien in einem Verzeichnis sollen kopiert werden, der Name des neuen Verzeichnisses besteht aus einer Variablen des Dateinamens. Als Beispiel ist das glaube ich leichter:

D:\Test 

ist der Ordner indem sich unzählige Dateien finden. Alle haben komplett andere Namen, aber ein Syntax ist immer gleich:

.A23B4.
.A4B8.
.A34B23. usw.

Also der vollständige Name wäre:

Dokument Chef.A23B4.alt.pdf
Dokument User3.A4B8.alt.pdf
Dokument.User4.A34B23.pdf

Mein Ziel ist es nun, die Datei Dokument Chef.A23B4.alt.pdf in den Ordner D:\Test\A23B4 zu kopieren.
Dokument User3.A4B8.alt.pdf soll in den Ordner D:\Test\A4B8 kopiert werden und Dokument.User4.A34B23.pdf nach D:\Test\A34B23.

Was ich also benötige ist immer diese Kombination aus dem Text. Das Problem, die Zahlen variieren von Datei zu Datei. Nur die beiden "." und die Buchstaben A und B sind immer gleich. Ich müsste also irgendwie in einer for Schleife das Teilstück:

".A*B*."  

suchen. Ich habe aber absolut keine Idee wie ich das bewerkstelligen kann, mein erster Versuch in der Batch sah so aus:

for %%a in ("%~dp1*.pdf") do (  
	set dir=%%~na
	set name=%%~nxa
	rem for /f %%b in (".*S*E*." "!name!" set "dir=%%b"  
	echo !dir!
	pause
	md "%~dp1!dir!"   
	move "%%a" "%~dp1!dir!">nul  
)

Natürlich funktioniert die Zeile die im rem ist absolut 0, aber genau diesen Part finde ich nicht. Also wie ich jetzt dieses Teilstück des Dateinamens (.A*B*.) als Variable "dir" setzen kann. Ich bin mir sicher das ist ein total einfacher string, nur fehlt mir der Fingerzeig.

Für Hilfe bin ich sehr dankbar.

Content-Key: 5248509093

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

Printed on: April 27, 2024 at 18:04 o'clock

Mitglied: 5175293307
5175293307 Jan 07, 2023 updated at 19:20:09 (UTC)
Goto Top
for %%a in ("%~dp1*.pdf") do (  
    for /f "tokens=2 delims=." %%b in ("%%~nxa") do (  
        if not exist "%~dp1%%b" md "%~dp1%%b"  
        move "%%a" "%~dp1%%b\"  
    )
)
Wurstel
Member: Kriegstreiber
Kriegstreiber Jan 07, 2023 updated at 20:30:14 (UTC)
Goto Top
Danke für den Vorschlag, leider funktioniert es so nicht, war mein Fehler, ich hätte das oben ausführlicher Schreiben müssen. Diese Kombination kann an jeder möglichen Stelle sein, auch . ist Teils im Dateinamen.

User2.Bericht.A23B18.erledigt.pdf
User.3.Bericht.A12B29.noch nicht.eingereicht.pdf

Also den "." als Delimeter setzen und vom zweiten Token ausgehen funktioniert leider nicht.
Mitglied: 5175293307
Solution 5175293307 Jan 07, 2023 at 21:38:03 (UTC)
Goto Top
@echo off
PowerShell -EP Bypass -C "dir '%~dp1' -File -Filter *.pdf | ?{$_.Name -match '\.(A\d+B\d+)\.'} | %%{move-item $_.Fullname -Destination (md (Join-Path $_.DirectoryName $matches[1]) -Force).Fullname}"  
Member: Kriegstreiber
Kriegstreiber Jan 08, 2023 at 02:31:47 (UTC)
Goto Top
Perfekt, vielen Dank wurstel.