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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 61109
Url: https://administrator.de/contentid/61109
Printed on: April 19, 2024 at 11:04 o'clock
7 Comments
Latest comment
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:
miniversum
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
Das pasiert mit den For Befehl.
Stehen also Dateinamen drin werden diese ausgelesen.
Genaueres zum For Befehl (oder andern) indem du in der Eingabeaufforderung
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.