Datei mit gleichnamigem Ordner verschieben?
Hallo zusammen,
suche eine Lösung für folgendes Problem:
Ich möchte ununterbrochen einen Ordner nach *.txt Dateien abfragen.
Befindet sich eine solche txt Datei im Ordner, soll das Skript 2 Sekunden warten und dann einen Ordner (der automatisch existiert, sobald die txt Datei existiert), welcher den gleichen Namen hat verschieben.
Also bsp.:
Datei: 12345.txt zusammen mit Ordner "12345" nach D:\Backup verschieben.
So weit bin ich schon:
Hat hemand schonmal einen ähnlichen Fall gehabt?
suche eine Lösung für folgendes Problem:
Ich möchte ununterbrochen einen Ordner nach *.txt Dateien abfragen.
Befindet sich eine solche txt Datei im Ordner, soll das Skript 2 Sekunden warten und dann einen Ordner (der automatisch existiert, sobald die txt Datei existiert), welcher den gleichen Namen hat verschieben.
Also bsp.:
Datei: 12345.txt zusammen mit Ordner "12345" nach D:\Backup verschieben.
So weit bin ich schon:
:LOS
REM #### Da Win2k3 Resouce Kit nicht vorhanden
REM #### Trick, um unter Batch 2 Sekunden zu warten
PING 1.1.1.1 -n 1 -w 2000 >NUL
REM #### Prüfe, ob Datei vorhanden
D:
cd D:\Backup
if exists *.txt
--Und hier weiß ich nicht mehr weiter--
goto LOS
Hat hemand schonmal einen ähnlichen Fall gehabt?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 103632
Url: https://administrator.de/contentid/103632
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo hiob08!
So ganz klar ist mir Dein Vorhaben nicht - nach Deinem Batchansatz sieht es so aus, als wolltest Du in D:\Backup nachsehen, ob eine Textdatei existiert, die Du dann eigentlich erst dorthin verschieben willst ...
Falls gemeint wäre, dass diese Überprüpfung zB für den Ordner "D:\In" gemacht werden soll, dann etwa so:
Falls es möglich wäre, dass ein gleichnamiger Ordner in "D:\Backup" bereits existiert, müsstest Du Dir überlegen, was in diesem Fall zu geschehen hat - ein Überschreiben ließe sich etwa so realisieren:
Grüße
bastla
So ganz klar ist mir Dein Vorhaben nicht - nach Deinem Batchansatz sieht es so aus, als wolltest Du in D:\Backup nachsehen, ob eine Textdatei existiert, die Du dann eigentlich erst dorthin verschieben willst ...
Falls gemeint wäre, dass diese Überprüpfung zB für den Ordner "D:\In" gemacht werden soll, dann etwa so:
@echo off & setlocal
:LOS
ping 127.0.0.1 -n 2>nul
for %%i in ("D:\In\*.txt") do (
move "%%i" "D:\Backup\">nul
move "%%~dpni" "D:\Backup\">nul
)
goto :LOS
@echo off & setlocal
:LOS
ping 127.0.0.1 -n 2>nul
for %%i in ("D:\In\*.txt") do (
move "%%i" "D:\Backup\">nul
if exist "D:\Backup\%%~ni" (
rd /s /q "D:\Backup\%%~ni"
move "%%~dpni" "D:\Backup\">nul
)
)
goto :LOS
bastla
Hallo hiob08!
Dann musst Du eigentlich nur im Batch oben "D:\Backup" auf "D:\Anderer Ordner" und "D:\In" auf "D:\Backup" ändern (was viel leichter ginge, wenn ich, wie üblich, Variablen verwendet hätte )...
... was aber noch offen bleibt, ist die Frage der möglichen Existenz eines gleichnamigen Ordners in "D:\Anderer Ordner" bzw der Reaktion darauf.
Grüße
bastla
Dann musst Du eigentlich nur im Batch oben "D:\Backup" auf "D:\Anderer Ordner" und "D:\In" auf "D:\Backup" ändern (was viel leichter ginge, wenn ich, wie üblich, Variablen verwendet hätte )...
... was aber noch offen bleibt, ist die Frage der möglichen Existenz eines gleichnamigen Ordners in "D:\Anderer Ordner" bzw der Reaktion darauf.
Grüße
bastla
Hallo hiob08!
Eine weitere berührst Du mit Deiner dritten Frage: Es ist nur für Parametervariable (%0 bis %9) und die Variablen der "for"-Schleife möglich, eine Pfadzerlegung vorzunehmen - "%%dpni" liefert daher Laufwerk ("drive"), Pfad und Name (ohne "extension") der Datei in "%%i".
Durch die Schleife werden der Reihe nach alle im Ordner befindlichen Textdateien erfasst (es könnten ja während der Pause theoretisch auch 2 Ordner + Textdateien erstellt worden sein).
Mehr zum Thema findest Du unter "for /?" (wenn Du Dich bis zum Ende durchkämpfst ).
Noch zum Rest der Frage 2: Das ">nul" hat nur optische Gründe - es wird damit die Ausgabe des "move"-Befehles ("1 Datei verschoben") nach "Nirgendwo" geschickt und damit unterdrückt.
Grüße
bastla
Das könnte ich aber dann per move /Y erledigen, oder?
Abgesehen davon, dass "move" in einem Batch automatisch mit "/y" ausgeführt wird: Leider nein - um den bestehenden Ordner durch den neu zu verschiebenden zu ersetzen, müsstet Du die zweite Variante oben verwenden.Wieso heißt die Variable %%i und nicht bspw. %i%?
Da es sich um eine "for"-Laufvariable (die tatsächlich den Dateipfad enthält) handelt, weist diese einige Besonderheiten auf - die Schreibweise ohne abschließendes "%" ist eine davon.Eine weitere berührst Du mit Deiner dritten Frage: Es ist nur für Parametervariable (%0 bis %9) und die Variablen der "for"-Schleife möglich, eine Pfadzerlegung vorzunehmen - "%%dpni" liefert daher Laufwerk ("drive"), Pfad und Name (ohne "extension") der Datei in "%%i".
Durch die Schleife werden der Reihe nach alle im Ordner befindlichen Textdateien erfasst (es könnten ja während der Pause theoretisch auch 2 Ordner + Textdateien erstellt worden sein).
Mehr zum Thema findest Du unter "for /?" (wenn Du Dich bis zum Ende durchkämpfst ).
Noch zum Rest der Frage 2: Das ">nul" hat nur optische Gründe - es wird damit die Ausgabe des "move"-Befehles ("1 Datei verschoben") nach "Nirgendwo" geschickt und damit unterdrückt.
Grüße
bastla