
30452
21.05.2006, aktualisiert am 24.05.2006
Txt datei in verschiedene Ordner kopieren
Hallo,
ich habe folgendes Problem. Ich muss jede Woche 2 Mal Aktualisierungen einer Datei, die mir per Mail geschickt wird auf dem Server verteilen. Auf dem Server sind unter C:\User\ etwa 250 verschiedene Unterordner. Ich musste bisher also 500 Kopien pro Woche machen. Dies erscheint mir aber per Batch wesentlich einfacher zu sein. Die zu kopierende Datei befindet sich auf meinem Rechner, da es sich durchaus sogar um verschiedene Dateien handelt wäre eine Abfrage welche Datei zu kopieren ist ganz hilfreich. Diese Datei muss nun in besagte 250 Ordner auf dem Server. Gibt es eine Möglichkeit die Unterordner auszulesen und dann mit der zu kopierenden Datei zu bestücken? Die Ordner haben keine weiteren Unterordner also können wir diesen Fall ausschliessen. Und wenn eine Backupdatei noch vor dem kopieren auf meinem Rechner als BackupDatum.dateiendung angelegt würde wäre die ganze Sache perfekt. Vielen Dank im Vorraus für eure Hilfe
ich habe folgendes Problem. Ich muss jede Woche 2 Mal Aktualisierungen einer Datei, die mir per Mail geschickt wird auf dem Server verteilen. Auf dem Server sind unter C:\User\ etwa 250 verschiedene Unterordner. Ich musste bisher also 500 Kopien pro Woche machen. Dies erscheint mir aber per Batch wesentlich einfacher zu sein. Die zu kopierende Datei befindet sich auf meinem Rechner, da es sich durchaus sogar um verschiedene Dateien handelt wäre eine Abfrage welche Datei zu kopieren ist ganz hilfreich. Diese Datei muss nun in besagte 250 Ordner auf dem Server. Gibt es eine Möglichkeit die Unterordner auszulesen und dann mit der zu kopierenden Datei zu bestücken? Die Ordner haben keine weiteren Unterordner also können wir diesen Fall ausschliessen. Und wenn eine Backupdatei noch vor dem kopieren auf meinem Rechner als BackupDatum.dateiendung angelegt würde wäre die ganze Sache perfekt. Vielen Dank im Vorraus für eure Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 32961
Url: https://administrator.de/forum/txt-datei-in-verschiedene-ordner-kopieren-32961.html
Ausgedruckt am: 23.04.2025 um 04:04 Uhr
8 Kommentare
Neuester Kommentar
Moin SiggiAZE,
das Kernstück der Lösung ist recht simpel (Beispiel vom CMD-Prompt aus):
Um diese Zeile herum kannst Du es in verschiedene Richtungen verfeinern:
a) Wenn Du tatsächlich vorher gefragt werden willst, welche Datei(en) kopiert werden sollen, dann ggf. ein
Set /P "files2copy=Welche Datei[en] kopieren? "
vorwegschreiben.
b) Würde ich aber anders machen:
Ich würde mir einen Unterordner "\Files2copy" oder ähnlich einrichten, Alles, was dort drin steht am Montag und Donnerstag (oder wann immer Deine neuen Dateien kommen) wird kopiert. Feddich. Wenn alles kopiert ist, dann verschieben in "\FilesCopied".
c) LogDatei mit Datumssuffix
In den Tutorials im Bereich Batch & Shell sind ein paar Beispiele, wie Du aus einem Datum einen Teilstring für einen Log-Dateinamen basteln kannst (Workshop Batch for Runaways III)
d) Erfolgskontrolle
Wenn Du protokollieren willst, welche Clientverzeichnisse diese neue Datei als Kopie erhalten haben, dann würde ich nach der Zeile mit dem Kopieren einfach ein "Dir /b /s c:\user\ZuKopierendeDatei.xyz>\\meinServer\MeineLogs\Log_vonYYYY-MM-TT.log" machen.
Du kopierst doch in alle User-Verzeichnisse, die zu diesem Zeitpunkt angelegt worden sind.
Wenn ein User erst am Dienstag angelegt wird, hat er eben am Montag noch keine neue Datei erhalten. Und weiter?
e) Wenn Du auf das manuelle Abfragen "Welche Datei kopieren?" verzichten kannst, dann kannst Du den Batch auch 2x die Woche als Dienst starten.
Gruß
Biber
das Kernstück der Lösung ist recht simpel (Beispiel vom CMD-Prompt aus):
$cmd$For /f %i in ('dir /b C:\user /a:D') do Copy <i>ZuKopierendeDatei.xyz</i> %i
Um diese Zeile herum kannst Du es in verschiedene Richtungen verfeinern:
a) Wenn Du tatsächlich vorher gefragt werden willst, welche Datei(en) kopiert werden sollen, dann ggf. ein
Set /P "files2copy=Welche Datei[en] kopieren? "
vorwegschreiben.
b) Würde ich aber anders machen:
Ich würde mir einen Unterordner "\Files2copy" oder ähnlich einrichten, Alles, was dort drin steht am Montag und Donnerstag (oder wann immer Deine neuen Dateien kommen) wird kopiert. Feddich. Wenn alles kopiert ist, dann verschieben in "\FilesCopied".
c) LogDatei mit Datumssuffix
In den Tutorials im Bereich Batch & Shell sind ein paar Beispiele, wie Du aus einem Datum einen Teilstring für einen Log-Dateinamen basteln kannst (Workshop Batch for Runaways III)
d) Erfolgskontrolle
Wenn Du protokollieren willst, welche Clientverzeichnisse diese neue Datei als Kopie erhalten haben, dann würde ich nach der Zeile mit dem Kopieren einfach ein "Dir /b /s c:\user\ZuKopierendeDatei.xyz>\\meinServer\MeineLogs\Log_vonYYYY-MM-TT.log" machen.
Du kopierst doch in alle User-Verzeichnisse, die zu diesem Zeitpunkt angelegt worden sind.
Wenn ein User erst am Dienstag angelegt wird, hat er eben am Montag noch keine neue Datei erhalten. Und weiter?
e) Wenn Du auf das manuelle Abfragen "Welche Datei kopieren?" verzichten kannst, dann kannst Du den Batch auch 2x die Woche als Dienst starten.
Gruß
Biber
Hi,
set pfad1=d:\a\update
set pfad2=d:\a\user
For /f %%a in ('dir /b /A:-d %pfad1%') Do for /f %%b in ('dir /b /s %pfad2%\user\%%~nxa') DO del %%b
In der ersten FOR Schleife wird nach Dateien gesucht. In die Zweite FOR Schleife wird durch %%~nxa nur Dateiname und Extension übergeben. Gelöscht wird dann Datei in Ordner User %%b, wenn exisitiert.
Der Fehler deines Codes prüfe ich gerade.
Echo hilft:
For /f "delims=" %%l in ('dir /b /A:-d "%pfad1%"') do For /f %%i in ('dir /s %pfad2% /a:D') do echo d:\a\user\%%i\%%l >> test.txt
Die Test.txt hat dann folgende Einträge c:\user\user\ und c:\update\update. Diese kann er nicht richtig auflösen, da sie nicht existieren.
Auch wenn für sich genommen, die einzelnen DIR Befehle Korrekt sind, wird %%i nicht so ausgegeben wie gewünscht. ?????
Gruß Miguel
set pfad1=d:\a\update
set pfad2=d:\a\user
For /f %%a in ('dir /b /A:-d %pfad1%') Do for /f %%b in ('dir /b /s %pfad2%\user\%%~nxa') DO del %%b
In der ersten FOR Schleife wird nach Dateien gesucht. In die Zweite FOR Schleife wird durch %%~nxa nur Dateiname und Extension übergeben. Gelöscht wird dann Datei in Ordner User %%b, wenn exisitiert.
Der Fehler deines Codes prüfe ich gerade.
Echo hilft:
For /f "delims=" %%l in ('dir /b /A:-d "%pfad1%"') do For /f %%i in ('dir /s %pfad2% /a:D') do echo d:\a\user\%%i\%%l >> test.txt
Die Test.txt hat dann folgende Einträge c:\user\user\ und c:\update\update. Diese kann er nicht richtig auflösen, da sie nicht existieren.
Auch wenn für sich genommen, die einzelnen DIR Befehle Korrekt sind, wird %%i nicht so ausgegeben wie gewünscht. ?????
Gruß Miguel
Moin, ihr Hobby-Bätcher,
nun machts nicht so kompliziert...das wird es von alleine...
Das große ECHO nach dem Testen löschen, dann ist es scharf.
Gruß
Biber
nun machts nicht so kompliziert...das wird es von alleine...
@echo off & setlocal
Set "inputdir=c:\Docs"
Set "Userroot=c:\user"
:Rem Löschen, falls vorhanden; danach kopieren
for %%i in (%inputdir%\*.*) do @for /f %%a in ('dir /b /A:D %userroot%') do (
ECHO if exist %userroot%\%%~nxa\%%~nxi del /f %userroot%\%%~nxa\%%~nxi
ECHO copy %inputDir%\%%~nxi %userroot%\%%~nxa\%%~nxi
)
Das große ECHO nach dem Testen löschen, dann ist es scharf.
Gruß
Biber
Schön, SiggiAZE,
Sieht übersichtlich und wartbar aus. Eine Kleinigkeit noch...
Dieses ändern:
IF ERRORLEVEL=0 ECHO Alle Dateien vollständig in alle Ordner kopiert>>%date%_log.txt
in:
IF NOT ERRORLEVEL 1 ECHO Alle Dateien vollständig in alle Ordner kopiert>>%date%_log.txt
(Bedeutet: ERRORLEVEL 1 oder ein höherer liegt nicht vor.
- oder (exakter Vergleich mit "==" ) -
IF %ERRORLEVEL%==0 ECHO Alle Dateien vollständig in alle Ordner kopiert>>%date%_log.txt
Gruß
Biber
Sieht übersichtlich und wartbar aus. Eine Kleinigkeit noch...
Dieses ändern:
IF ERRORLEVEL=0 ECHO Alle Dateien vollständig in alle Ordner kopiert>>%date%_log.txt
in:
IF NOT ERRORLEVEL 1 ECHO Alle Dateien vollständig in alle Ordner kopiert>>%date%_log.txt
(Bedeutet: ERRORLEVEL 1 oder ein höherer liegt nicht vor.
- oder (exakter Vergleich mit "==" ) -
IF %ERRORLEVEL%==0 ECHO Alle Dateien vollständig in alle Ordner kopiert>>%date%_log.txt
Gruß
Biber