Nach bestimmten Ordner namen suchen und in einem anderem Pfad kopieren
Hallo zusammen,
ich bin neu hier und mit der Bach-Programmierung habe ich auch nicht viel Erfahrung.
Habe folgendes Problem:
Ich würde gerne in einem Pfad nach einem Bestimmten Ordner suchen die mit "VM" anfängt (z.B VM00, VM01, VM02, VM03... ) und bestimmte dateien wie z.B. .txt und .csv dateien in dem Ornder nur rauskopiere und in einem anderen Pfad mit der selben Ordnerstruktur kopiere.
Habe bereits im Forum nachgeschaut und nachgelsen, leider kam ich nicht voran.
Ich würde mich freuen über jede Hilfe.
Anbei noch mein Code:
Gruß
ich bin neu hier und mit der Bach-Programmierung habe ich auch nicht viel Erfahrung.
Habe folgendes Problem:
Ich würde gerne in einem Pfad nach einem Bestimmten Ordner suchen die mit "VM" anfängt (z.B VM00, VM01, VM02, VM03... ) und bestimmte dateien wie z.B. .txt und .csv dateien in dem Ornder nur rauskopiere und in einem anderen Pfad mit der selben Ordnerstruktur kopiere.
Habe bereits im Forum nachgeschaut und nachgelsen, leider kam ich nicht voran.
Ich würde mich freuen über jede Hilfe.
Anbei noch mein Code:
@echo off
set var1="VM"
set var2="00"
set OUTPUTPATH="C:\..\_export\"%var1%%var2%
set filesource="C:\..\Ornder"
MD %OUTPUTPATH%
for /R %filesource% %%f in (*.txt,*.csv) do (
copy %%f %OUTPUTPATH%
set a=%%~nxf
echo %a%
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 326520
Url: https://administrator.de/forum/nach-bestimmten-ordner-namen-suchen-und-in-einem-anderem-pfad-kopieren-326520.html
Ausgedruckt am: 05.05.2025 um 21:05 Uhr
8 Kommentare
Neuester Kommentar

Hallo,
deine Angaben:
sind eine widersinnige Mischung aus absoluten und relativen Pfaden, C:\ ist doch das root mit .. ein Level hoch bringt dich nirgendwo anders hin.
Den Outputpath vorab mit Variablen zu ergänzen die doch den gefundenen Pfad spiegeln sollen macht auch keinen Sinn.
EDIT
Gruß
LotPings
deine Angaben:
set OUTPUTPATH="C:\..\_export\"%var1%%var2%
set filesource="C:\..\Ornder"
Den Outputpath vorab mit Variablen zu ergänzen die doch den gefundenen Pfad spiegeln sollen macht auch keinen Sinn.
EDIT
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "Base=C:\Irgend\was\Ordner\"
Set "Dest=C:\Irgendwas\anderes\_export\
PushD "%Base%"
For /f "delims=" %%A in (
'Dir /B/AD VM* ^| Findstr /i "^VM[0-9][0-9]$"'
) Do for /R "%%~fA" %%f in (*.txt,*.csv) do Call :Sub "%%~fF"
popd
Goto :Eof
:Sub
Set "File=%~f1"
Set "Path=%~dp1"
Set "NewFile=!File:%Base%=%Dest%!"
Set "NewPath=!Path:%Base%=%Dest%!"
If Not Exist "%NewPath%" MD "%NewPath%"
Copy "%File%" "%Newfile%"
Gruß
LotPings

Die geschachtelten For Schleifen funktionierten so nicht,
diesen Code habe ich getestet:
Gruß
LotPings
diesen Code habe ich getestet:
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "Base=Q:\Test\2017-01\16"
Set "Dest=C:\Test\2017-01\16"
PushD "%Base%"
For /F "delims=" %%A in (
'Dir /B/AD VM* ^| Findstr /i "^VM[0-9][0-9]$"'
) Do Call :ProcessDir "%%~fA"
popd
Goto :Eof
:ProcessDir
Echo ProcessDir %1
For /R %1 %%B in (*.txt,*.csv) do Call :ProcessFile "%%~fB"
Goto :Eof
:ProcessFile %1
Echo ProcessFile %1
Set "File=%~f1"
Set "Path=%~dp1"
Set "NewFile=!File:%Base%=%Dest%!"
Set "NewPath=!Path:%Base%=%Dest%!"
If Not Exist "%NewPath%" MD "%NewPath%"
Copy "%File%" "%Newfile%" >Nul
Gruß
LotPings

Ordner werden eigentlich nicht kopiert, nur wenn eine Datei in einen noch nicht existierenden Ordner kopiert werden soll, wird der Ordner angelegt. Das habe ichdeiner Beschreibung so entrnommen?
In Zeile 13 gehört ein
sonst läuft der Code in die Subroutine durch.
Zeile 17 soll wohl %folderpath% sein, nicht %directory% oder umgekehrt.
In Zeile 13 gehört ein
Goto :Eof
Zeile 17 soll wohl %folderpath% sein, nicht %directory% oder umgekehrt.

Schön das es funktioniert,
wenn du jetzt noch Gelöst setzt, sind wir alle glücklich
Gruß
LotPings
wenn du jetzt noch Gelöst setzt, sind wir alle glücklich
Gruß
LotPings