erdgnrft
Goto Top

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:

@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ß

Content-Key: 326520

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

Printed on: May 8, 2024 at 12:05 o'clock

Mitglied: 77559
77559 Jan 16, 2017 updated at 17:37:18 (UTC)
Goto Top
Hallo,
deine Angaben:
set OUTPUTPATH="C:\..\_export\"%var1%%var2%   
set filesource="C:\..\Ornder"   
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
@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
Member: erdgnrft
erdgnrft Jan 17, 2017 at 09:45:33 (UTC)
Goto Top
Hallo LotPings,

vielen Dank für deine Rückmeldung. Genau habe mich irgendwie in meinem Code mit den Pfaden und Variablen selber verwirrt.
Ich habe deinen Code jetzt getestet, aber im Export Pfad werden keine Ordner erstellt und kopiert wird auch nichts.

Wüsstest du an was das liegen konnte?

Gruß
Erdgnrft
Mitglied: 77559
77559 Jan 18, 2017 at 12:53:10 (UTC)
Goto Top
Die geschachtelten For Schleifen funktionierten so nicht,

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
Member: erdgnrft
erdgnrft Jan 18, 2017 updated at 13:37:49 (UTC)
Goto Top
Hallo LotPings,

vielen Dank für deine Mühe, ich habe deinen Code getestet und mir fällt dabei auf, dass die Unterordner mit Kopiert werden.
Ich bräuchte nur die Dateien.

Habe aber inzwischen einen anderen Weg gefunden, die Dateien zu bekommen.

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

Set outpath=C:\..\_export\
Set viewpath=C:\..\Ordner\

for /D /R %viewpath% %%G in ("VM0*") do (  
MD %outpath%\%%~nxG
set directory=%%~nxG
echo "VM folder : "%%G  
Call :Search %%G
)

:Search
Set folderpath=%1
for /R %folderpath% %%F in (*.txt,*.csv) do (
echo "VM dir :"%directory%  
echo "File :"%%F  
copy %%F %outpath%\%directory%
)

Soweit bekomme ich alle Dateien in die Richtigen Verzeichnisse, aber in letzten Ordner "VM06" werden auch Dateien aus dem Übergeordneten Ordner mit kopiert (welches nicht kopiert sein sollte), finde den Fehler irgendwie nicht.

Hättest du dafür eine Lösung?

Gruß
Erdgnrft
Mitglied: 77559
77559 Jan 18, 2017 at 21:10:38 (UTC)
Goto Top
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
Goto :Eof
sonst läuft der Code in die Subroutine durch.

Zeile 17 soll wohl %folderpath% sein, nicht %directory% oder umgekehrt.
Member: erdgnrft
erdgnrft Jan 19, 2017 at 08:05:49 (UTC)
Goto Top
Hallo LotPings,

ich habe in die Zeile 13 "Goto :Eof" eingesetzt und nun funktioniert alles wie es sein soll.
Danke dir vielmals.

Gruß
Erdgnrft
Mitglied: 77559
77559 Jan 20, 2017 at 02:47:12 (UTC)
Goto Top
Schön das es funktioniert,
wenn du jetzt noch Gelöst setzt, sind wir alle glücklich face-wink

Gruß
LotPings
Member: erdgnrft
erdgnrft Jan 20, 2017 at 07:24:23 (UTC)
Goto Top
erledigt =)