valume91
Goto Top

Batch, wechselnden Dateinamen kopieren

Ich habe eine Batch bei der die Datei (...)\Erstauftr„ge\C%Zahl%* kopiert werden soll, es werden jedoch alle Ordner aus dem Ordner Erstaufträge kopiert!

Hallo liebes Forum

Ich habe folgende Batch

for /f "delims=| " %%i in ('findstr "|" "I:\EDV\180 Projekte\Umstellung Filemaker\Auftragseingang Servax\Ordnerkopie.txt"') do set "Zahl=%%i"  
if %Zahl%==MaxvonEANummer exit
xcopy "I:\SERVAX\Servax\ST\Erstauftr„ge\C%Zahl%*" "I:\SERVAX\Servax\ST\Gesicherte Erstauftr„ge\" /E  

Bei der möchte ich das nur zum Beispiel der Ordner "C1170 blablblaalbalbala" kopiert wird.
Dabei steht %Zahl% für 1170 und "blablblaalbalbala" für "*".
Es werden dabei jedoch alle Dateien aus dem Ordner Erstaufträge kopiert, und nicht nur der gewünschte.

Was mache ich falsch?

MfG Valume

Content-ID: 113507

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

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

bastla
bastla 08.04.2009 um 14:16:00 Uhr
Goto Top
Hallo Valume91!

Sieht so aus, als wäre %Zahl% leer - damit würde dann tatsächlich "C*" kopiert ...

Absichern könntest Du das etwa so:
set Zahl=
for /f "delims=| " %%i in ('findstr "|" "I:\EDV\180 Projekte\Umstellung Filemaker\Auftragseingang Servax\Ordnerkopie.txt"') do set "Zahl=%%i"  
if not defined Zahl goto :eof
if %Zahl%==MaxvonEANummer goto :eof
xcopy "I:\SERVAX\Servax\ST\Erstauftr„ge\C%Zahl%*" "I:\SERVAX\Servax\ST\Gesicherte Erstauftr„ge\" /E  
Wofür steht eigentlich "MaxvonEANummer"?

Grüße
bastla
Valume91
Valume91 08.04.2009 um 14:17:20 Uhr
Goto Top
Sorry Bastla aber %Zahl% ist nicht leer, das habe ich schon überprüft!
Ausserdem werden auch Ordner kopiert die nicht mit "C" beginnen...

Edit:

MaxVonEANummer wird für Zahl gsetzt wenn die txt keine Zahl enthält. Darum wollte ich das es die Batch abbricht fals die txt keine Zahl enthält.

Vieleicht Hilft dir der Inhalt der txt weiter:

---------------------
|  MaxvonEANummer   |
---------------------
|              1170 |
---------------------
bastla
bastla 08.04.2009 um 14:20:02 Uhr
Goto Top
Hast Du es schon mit dem Kurznamen (zB "ERSTAU~1") anstelle von "Erstauftr„ge" versucht?

Grüße
bastala
Valume91
Valume91 08.04.2009 um 14:23:45 Uhr
Goto Top
Ja hab ich, es werden immer noch alle Ordner kopiert -.-
bastla
bastla 08.04.2009 um 14:30:55 Uhr
Goto Top
Aufgrund des "\C" am Ende des Pfades kann ich mir eigentlich nicht vorstellen, dass Dateien bzw Ordner, die nicht mit "C" beginnen, kopiert werden ...

... anyhow: Versuch es mal so:
for /f "delims=" %%i in ('dir /b /ad "I:\SERVAX\Servax\ST\Erstauftr„ge"^|findstr /b "C%Zahl%"') do echo xcopy "I:\SERVAX\Servax\ST\Erstauftr„ge\%%i" "I:\SERVAX\Servax\ST\Gesicherte Erstauftr„ge\" /E
Das "echo" ist dazu da, die Kopierbefehle (sollte ja eigentlich nur einer werden) anzuzeigen ...

Grüße
bastla
Valume91
Valume91 08.04.2009 um 14:37:50 Uhr
Goto Top
Welchen Teil der Batch soll ich den durch das ersetzten?
Wenn ich alles ersetze rattert die Batch durch, jedoch wird nichts kopiert.
bastla
bastla 08.04.2009 um 14:41:45 Uhr
Goto Top
Das wäre die neue Zeile 5.

Es soll ja auch nichts kopiert werden, sondern der Kopierbefehl wird nur angezeigt - sinnvoll ist daher ein Test direkt von der Kommandozeile oder, als neue Zeile 6, ein "pause", damit Du das Ergebnis in Ruhe ansehen kannst.

Grüße
bastla
Valume91
Valume91 08.04.2009 um 14:47:12 Uhr
Goto Top
Hmmmm es wird immer noch nichts kopiert, ich habe auch bereits ein pause eingefügt, jedoch wird kein
Fehler angezeigt.
bastla
bastla 08.04.2009 um 14:54:45 Uhr
Goto Top
Es soll auch kein Fehler, sondern ein Befehl der Art
xcopy "I:\SERVAX\Servax\ST\Erstauftr„ge\C1170" "I:\SERVAX\Servax\ST\Gesicherte Erstauftr„ge\" /E
angezeigt werden (und kopiert wird sowieso nix, weil der Kopierbefehl nur angeschrieben, aber nicht ausgeführt wird).
Falls Du ein "echo off" am Beginn des Batches verwendest, ändere es vorübergehend auf "echo on" - damit werden alle Befehle vor ihrer Ausführung angezeigt. Soferne Du daraus nichts ablesen kannst, poste bitte (unter Verwendung der -Formatierung) die entsprechenden Zeilen.

Grüße
bastla
Valume91
Valume91 08.04.2009 um 15:09:38 Uhr
Goto Top
Unter der verwendung folgender Batch

set Zahl=
for /f "delims=| " %%i in ('findstr "|" "I:\EDV\180 Projekte\Umstellung Filemaker\Auftragseingang Servax\Ordnerkopie.txt"') do set "Zahl=%%i"  
if not defined Zahl goto :eof
if %Zahl%==MaxvonEANummer goto :eof
for /f "delims=" %%i in ('dir /b /ad "I:\SERVAX\Servax\ST\Erstauftr„ge"^|findstr /b "C%Zahl%"') do echo xcopy "I:\SERVAX\Servax\ST\Erstauftr„ge\%%i" "I:\SERVAX\Servax\ST\Gesicherte Erstauftr„ge\" /E  
pause

wird folgendes angezeigt: (am ende)

I:\EDV\180 Projekte\Umstellung Filemaker\Auftragseingang Servax>for /F "delims="  
 %i in ('dir /b /ad "I:\SERVAX\Servax\ST\Erstaufträge"|findstr /b "C1170"') do e  
cho xcopy "I:\SERVAX\Servax\ST\Erstaufträge\%i" "I:\SERVAX\Servax\ST\Gesicherte  
Erstaufträge\" /E  

I:\EDV\180 Projekte\Umstellung Filemaker\Auftragseingang Servax>echo xcopy "I:\S  
ERVAX\Servax\ST\Erstaufträge\C1170 Teamtechnik MHP-I-132-04AF-01" "I:\SERVAX\Ser  
vax\ST\Gesicherte Erstaufträge\" /E  
xcopy "I:\SERVAX\Servax\ST\Erstaufträge\C1170 Teamtechnik MHP-I-132-04AF-01" "I:  
\SERVAX\Servax\ST\Gesicherte Erstaufträge\" /E  

I:\EDV\180 Projekte\Umstellung Filemaker\Auftragseingang Servax>pause
Drücken Sie eine beliebige Taste . . .

Scheint zu funktionieren oder? Wie mache ich die jetzt scharf das sie die Dateien auch kopiert?
bastla
bastla 08.04.2009 um 15:14:38 Uhr
Goto Top
Wie mache ich die jetzt scharf das sie die Dateien auch kopiert?
Indem Du das "echo" vor dem "xcopy" entfernst.

Grüße
bastla
Valume91
Valume91 08.04.2009 um 15:22:14 Uhr
Goto Top
SUPER! Es funktioniert!
Jedoch werden nur die Unterordner von C1170 kopiert.
Es soll jedoch auch der Ordner C1170 kopiert werden!
Was muss ich da ändern?
Ich habe bereits beim xcopy ziel am schluss \C%Zahl% hinzugefügt, jedoch fragt er mich dann ob C1170 ein File Name oder ein Directory Name ist. Wie kann ich das ohne diese Frage machen?
bastla
bastla 08.04.2009 um 15:29:07 Uhr
Goto Top
Ändere die "Kopier"-Zeile auf
for /f "delims=" %%i in ('dir /b /ad "I:\SERVAX\Servax\ST\Erstauftr„ge"^|findstr /b "C%Zahl%"') do echo xcopy "I:\SERVAX\Servax\ST\Erstauftr„ge\%%i" "I:\SERVAX\Servax\ST\Gesicherte Erstauftr„ge\%%i\" /E
Soferne es sicher ist, dass nach der "Zahl" im Ordnernamen ein Leerzeichen folgt, wäre die folgende Zeile noch exakter (damit würde verhindert, dass zB auch "C11704" kopiert wird):
for /f "delims=" %%i in ('dir /b /ad "I:\SERVAX\Servax\ST\Erstauftr„ge"^|findstr /b /c:"C%Zahl% "') do echo xcopy "I:\SERVAX\Servax\ST\Erstauftr„ge\%%i" "I:\SERVAX\Servax\ST\Gesicherte Erstauftr„ge\%%i\" /E
Ansonsten: Schön, dass es funktioniert, aber seltsam bleibt die Sache dennoch ...

Grüße
bastla
Valume91
Valume91 08.04.2009 um 15:33:17 Uhr
Goto Top
Ansonsten: Schön, dass es funktioniert, aber seltsam bleibt die
Sache dennoch ...


Joa sehr seltsam. Vielen Dank noch für deine Mühe!

MfG Valume