horstdeluxe
Goto Top

Dateien in eigene Unterordner kopieren Batch

.

Hallo,

ich habe folgendes Problem und brächt dafür am besten eine Batchfile.

Wir haben folgenden Ordner
d:\Preise_neu\
in dem Ordner sind Kundendateien wie folgt
d:\Preise_neu\000009
d:\Preise_neu\000012
d:\Preise_neu\000015
es sind ca.500 Stück. Diese Dateien müssen wir nun per Hand in die jeweiligen passenden Ordner kopieren. Dr sieht wie folgt aus:
d:\preise\P000009
d:\preise\P000012
d:\preise\P000015

Also d:\Preise_neu\000009 in d:\preise\P000009 usw.
Ein umbenennen der Dateien oder Ordner darf nicht sein!

Habt ihr eine Idee?
Kommentar vom Moderator Biber am Oct 02, 2009 um 12:38:54 Uhr
Verschoben von "Windows" nach "Batches 4 All".

Content-Key: 126312

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

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

Mitglied: 60730
60730 Oct 02, 2009, updated at Oct 18, 2012 at 16:39:32 (UTC)
Goto Top
Servus,

das kannst du mit einer Schleife lösen.

Allerdings ist das kopieren nicht wirklich sinnig - denn jedesmal - wenn die Batch dann läuft - findest er ja noch die - die vorher bereits kopiert worden sind.

Die Batch, die du suchst - gibt es bereits - schau mal genauer

ich würde behaupten
Datei in gleichnamigen Ordner kopieren per Batch
wäre nicht so verkehrt face-wink

Gruß
ist eigentlich eine Frage für Batch & Shell und da findet sich auch die Lösung

>
Member: horstdeluxe
horstdeluxe Oct 02, 2009 at 10:15:41 (UTC)
Goto Top
Nein, die werden vor dem nächsten kopiervorgang rausgelöscht!

Kann leider keine passende Batch finden, habe schon gesucht face-sad

Achja, es kommt vor das im Quellordner Dateien sind (beispiel: 000512), und im Zielordner nicht der passende Unterordner ( P000512), existiert, der muss dann automatisch angelegt werden.
Member: bastla
bastla Oct 02, 2009 at 10:19:00 (UTC)
Goto Top
Hallo horstdeluxe und willkommen im Forum!
Kann leider keine passende Batch finden
Bevor sich das noch ins Wochenende reinzieht, versuch es damit:
@echo off & setlocal
set "Quelle=d:\Preise_neu"  
set "Ziel=d:\Preise"  

pushd "%Quelle%"  
for /f "delims=" %%i in ('dir /b /a-d 0*.') do (  
    if not exist "%Ziel%\P%%i" md "%Ziel%\P%%i"  
    copy "%%i" "%Ziel%\P%%i"  
)
popd
Grüße
bastla

@timobeil: Du gibst ja wirklich nie auf in Deinen pädagogischen Bemühungen ... face-wink
Mitglied: 60730
60730 Oct 02, 2009 at 10:19:18 (UTC)
Goto Top
Zitat von @horstdeluxe:
Nein, die werden vor dem nächsten kopiervorgang rausgelöscht!

aha - dann würde ich vermuten copy ist quatsch und Move wäre sinniger?

Kann leider keine passende Batch finden, habe schon gesucht face-sad

back-to-topno comment...

Member: horstdeluxe
horstdeluxe Oct 02, 2009 at 10:38:45 (UTC)
Goto Top
Fehlermeldung:

Die NTVDM-CPU hat einen ungültigen efehl entdeckt.
CS:072c IP:0101 OP:65 63 68 6f 20

*Sry hab leider absolut keine Ahnung von Batchfiles....
Member: Biber
Biber Oct 02, 2009 at 12:36:58 (UTC)
Goto Top
Moin horstdeluxe,

unter welchem Namen/mit welcher Endung hast Du den bastlas Schnipsel gespeichert?

Die richtige Endung sollte *.cmd oder *.bat sein.
Und die Datei sollte als unformatierte Textdatei gespeichert sein ( macht ein beliebiger brauchbarer Texteditor oder, falls nichts vorhanden auch NotePad).

Grüße
Biber
Member: horstdeluxe
horstdeluxe Oct 04, 2009 at 09:43:08 (UTC)
Goto Top
face-big-smile ja.....war mir auch eingefallen ......

...
Member: horstdeluxe
horstdeluxe Oct 05, 2009 at 05:37:00 (UTC)
Goto Top
Ich muss das Thema nun doch nocheinmal aufgreifen. Hab einen Fehler gemacht. Die Dateien heißen alle:
P000012
P00.........
P00........

Also immer mit einem "P" vorweg. Wie lautet nun das script, damit er die Dateien in den passenden Ordner:
0000012
00...........
00............

Kopiert und auch einen Ordner ohne das "P" erstellt? Also nur die Kundennr.
Member: Biber
Biber Oct 05, 2009 at 06:06:24 (UTC)
Goto Top
Moin horstdeluxe,

eigentlich wollten wir doch diese Kuh schon vor dem letzten Wochenende vom Eis haben..face-wink

In Anlehnung an bastlas Schnipsel oben wäre eine Variante:
@echo off & setlocal
set "Quelle=d:\Preise_neu"  
set "Ziel=d:\Preise"  

pushd "%Quelle%"  
for /f "delims=" %%i in ('dir /b /a-d P0*.') do call :ProcessFile "%%i"  
PopD
Goto :eof

:ProcessFile Parameter 1 ist der Dateiname P0xxxx.yyy
Set "Dateiname=%~1"  
Set "Dateiname=%Ziel%\P%Dateiname:~1%"  
if not exist "%Dateiname%" md "%Dateiname%"  
    copy "%~1" "%Ziel%\P%%i"  
)
Goto :eof

[ungetestete Skizze]

Der Einbau eines Unteraufruf mit "Call :Whatever" ist sicherer/wartbarer, weil nun mit dieser kryptisch anmutenden SubString-Funktionalität [Set "Dateiname=%Dateiname:~1%"] herumgeeiert werden muss.
Diese Syntax findest du unter Set/? am CMD-Prompt erklärt.

Grüße
Biber

[Edit Biber] Alles Montag-Morgen-Gestolpere. Siehe unten. [/Biber]
Member: horstdeluxe
horstdeluxe Oct 05, 2009 at 06:19:21 (UTC)
Goto Top
Sehr nett, leider legt er trotzdem Ordner mit "P" an und Dateien werden keine kopiert. Im Ordner Preise entsteht lediglich eine "P%i" Datei mit 0kb face-sad

@echo off & setlocal
set "Quelle=d:\Preise_neu"
set "Ziel=d:\Preise"

pushd "%Quelle%"
for /f "delims=" %%i in ('dir /b /a-d P0*.') do call :ProcessFile "%%i"
PopD
Goto :eof

:ProcessFile Parameter 1 ist der Dateiname P0xxxx.yyy
Set "Dateiname=%~1"
Set "Dateiname=%Ziel%\%Dateiname:~1%"
if not exist "%Dateiname%" md "%Dateiname%"
copy "%~1" "%Ziel%\P%%i"
)
Goto :eof


Soweit bin ich schonmal, da war noch ein P zuviel. Nun kopiert er aber die Dateien immernoch nicht.
Die fehlenden Ordner werden richrig erzeugt.
Member: Biber
Biber Oct 05, 2009 at 07:06:37 (UTC)
Goto Top
Sorry, horstdeluxe,

ich habe montagmorgens immer etwas Anlaufschwierigkeiten.
Bitte verbuche meinen vorangegangenen Kommentar unter "Sonstige Anekdoten".

Jetzt nochmal ein Versuch für den Anwendungsfall, dass die Dateien "P0xxx.yyy" heißen im Original und im ordner, Aber der Ordner selbst nur die Zeichen ab Stelle 2 des Dateinamens hat ("000123...." statt "P000123".

@echo off & setlocal
set "Quelle=d:\Preise_neu"  
set "Ziel=d:\Preise"  

pushd "%Quelle%"  
for /f "delims=" %%i in ('dir /b /a-d P0*.') do call :ProcessFile "%%i"  
PopD
Goto :eof

:ProcessFile Parameter 1 ist der Dateiname P0xxxx.yyy
Set "Dateiname=%~1"  
REM Falls Der Ordnername KEINE Endung haben soll
REM dann Set "Dateiname=%~n1  
Set "Dateiname=%Ziel%\%Dateiname:~1%"  
if not exist "%Dateiname%" md "%Dateiname%"  
    copy "%~1" "%Dateiname%\"  
)
Goto :eof

Gruße
Biber
Member: horstdeluxe
horstdeluxe Oct 05, 2009 at 07:12:31 (UTC)
Goto Top
Jap! Super! Dankeschön!!!!