onlinebroker
Goto Top

Kopieren von Dateien mit Leerzeichen aus Dateiliste

Hallo!

Ich habe ein Batch geschrieben mit dem ich Datensätze von einem Rechner auf ein Netzlaufwerk kopieren möchte um diese in einem Archivsystem zu speichern.
Es werden zunächst Dateien versch. Unterverzeichnisse mit der Erweiterung .xyz in eine Datei gespeichert. Diese Dateien können auch Leerzeichen enthalten und dienen als Basis für die spätere Kopieroperation, bei der Dateien mit der Endung .xyz und mit gleichem Namen aber verschiedener Dateierweiterungen kopiert werden.
Mit folgendem Befehl wurde bisher probiert den Kopiervorgang durchzuführen. Wobei die Datei tmp_file mit dem Befehl forfiles(Speicherung inkl. Anführungszeichen) befüllt wurde.
for /F %%i in (%tmp_file%) do xcopy %src_dir%%%~pni.* %save_dir%\ /D /V /F /Y >> %log_file% 2>>&1
Habe schon versucht ausschließlich eine der Dateien mit dem Befehl xcopy zu kopieren, mit Erfolg. Auch die Datei mit dem dir-Befehl aufzubauen und im oben aufgeführten Befehl die Quelldatei mit der Endung .xyz in Anführungszeichen zu kopieren führte nicht zum Erfolg.
Fragestellung:
1. Beim Kopieren der Dateien mit Leerzeichen im Namen wird die Datei bzw. der Pfad beim Leerzeichen abgeschnitten. Wie muss die for-Schleife verändert werden bzw. was gäbe es für weitere Möglichkeiten.
2. Abgesehen von den Dateien mit Leerzeichen werden bestimmte Dateien nicht kopiert, obwohl in der Logfile vermerkt ist, dass diese kopiert wurden.

Bsp. %tmp_file%:
"\Pfad\12345.xyz"
"\Pfad\12 345.xyz"
"\Pfad\123 45.xyz"

Für Hilfe bzw. Ideen bin ich dankbar.

MfG

Content-Key: 61109

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

Printed on: April 19, 2024 at 11:04 o'clock

Member: miniversum
miniversum Jun 12, 2007 at 07:15:31 (UTC)
Goto Top
Die Dateinamen werden Abgeschnitten, weil du die delims nicht gesetzt hast. Dadurch wird per Default das Leerzeichen als Trennzeichen benutzt. Willst du also in deiner For-Schleife Listen auslesen die Leerzeichen enthalten must du die delims imemr aus nichts setzen.
Des Weiteren werden durch das verwenden des ~ in %%~pni.* die ", die zwar in der Datei stehen, mit abgeschnitten. Dies mußt du auch wieder ausgleichen. So ergibt sich dann folgendes:

for /F "delims=" %%i in (%tmp_file%) do xcopy "%src_dir%%%~pni.*" "%save_dir%\" /D /V /F /Y >> %log_file% 2>>&1

miniversum
Member: Biber
Biber Jun 16, 2007 at 22:42:34 (UTC)
Goto Top
Moin onlnebroker,

Für Hilfe bzw. Ideen bin ich dankbar.
Und ich immer für eine Rückmeldung... face-wink
Ist das Problem durch miniversums Antwort gelöst worden?

Grüße
Biber
Member: onlinebroker
onlinebroker Jun 18, 2007 at 05:43:19 (UTC)
Goto Top
Mogähn,

die Lösung von miniversum hat wunderbar funktioniert.
Dank an miniversum für die schnelle Hilfe.

Gruß

onlinebroker
Member: wowka86
wowka86 Mar 23, 2008 at 00:11:33 (UTC)
Goto Top
abend...

nur ne frage zum verständniss...

wo kriege ich das "src_dir" her?? muss das nicht, so wie ich es verstanden habe, aus einet temporären datei kommen?
Member: miniversum
miniversum Mar 23, 2008 at 09:51:33 (UTC)
Goto Top
Die gepostete Zeile umdie es hier ging ist nur ein teil einer Batch.
Die Variable %src_dir% muß vorher difiniert werden. Ob die aus einer Datei kommt oder einfach so zuvor über einen set Befehl festgelegt wurde ist egal.
Das gleiche gilt auch für %tmp_file%, %save_dir% und %log_file%
Member: wowka86
wowka86 Mar 23, 2008 at 13:25:10 (UTC)
Goto Top
ach so ok
danke schön

aber eine frage hätte ich doch noch und zwar wenn die adresse und der Dateiname schon in der liste vorhanden sind, wie kann ich die zum kopieren auslesen?
also damit die batch die datei mit dem namen, der in der liste steht, auf zb eine andere festplatte kopiert.
Member: miniversum
miniversum Mar 23, 2008 at 18:09:26 (UTC)
Goto Top
Das pasiert mit den For Befehl.
for /F "delims=" %%i in (Datei.txt) do echo %%i
würde die datei "Datei.txt" auslesen und den Inhalt zeilenweise ausgeben. Dabei steht in dem Fall in der Variablen %%i jeweils eine Zeile in der Datei.
Stehen also Dateinamen drin werden diese ausgelesen.
Genaueres zum For Befehl (oder andern) indem du in der Eingabeaufforderung
for /?
eingibst.