megamazl
Goto Top

Befehl um nur eine Datei unabhängig vom Dateinamen zu verschieben

Hallo Administrator-Gemeinde,

ich habe folgendes Problem, ich benötige den Befehl um eine Datei zu verschieben. Allerdings sollte aus einem Ordner der evtl. mehrere Dateien enthält nur eine Datei verschoben werden. Die Dateien in diesem Ordner können unterschiedliche Dateinamen haben. Im Moment sieht meine Batch so aus:

:run 
if exist \\192.168.1.2\C\CPUnotbusy.txt move C:\webcast\Aufnahme\test.txt \\192.168.1.2\C\watchin
if exist \\192.168.1.3\C\CPUnotbusy.txt move C:\webcast\Aufnahme\test.txt \\192.168.1.3\C\watchin
if exist \\192.168.1.4\C\CPUnotbusy.txt move C:\webcast\Aufnahme\test.txt \\192.168.1.4\C\watchin
if exist \\192.168.1.5\C\CPUnotbusy.txt move C:\webcast\Aufnahme\test.txt \\192.168.1.5\C\watchin
if exist \\192.168.1.6\C\CPUnotbusy.txt move C:\webcast\Aufnahme\test.txt \\192.168.1.6\C\watchin
if exist \\192.168.1.7\C\CPUnotbusy.txt move C:\webcast\Aufnahme\test.txt \\192.168.1.7\C\watchin
if exist \\192.168.1.8\C\CPUnotbusy.txt move C:\webcast\Aufnahme\test.txt \\192.168.1.8\C\watchin
if exist \\192.168.1.9\C\CPUnotbusy.txt move C:\webcast\Aufnahme\test.txt \\192.168.1.9\C\watchin
if exist \\192.168.1.10\C\CPUnotbusy.txt move C:\webcast\Aufnahme\test.txt \\192.168.1.10\C\watchin
if exist \\192.168.1.11\C\CPUnotbusy.txt move C:\webcast\Aufnahme\test.txt \\192.168.1.11\C\watchin
if exist \\192.168.1.12\C\CPUnotbusy.txt move C:\webcast\Aufnahme\test.txt \\192.168.1.12\C\watchin
sleep 200
goto run

die Batch soll also erstmal auf einem Zielrechner abfragen ob die Datei CPUnotbusy.txt vorhanden ist. Ist diese Datei vorhanden, soll EINE Datei aus dem Ordner C:\webcast\Aufnahme auf diesen Zielrechner verschoben werden. Danach soll der nächste Zielrechner abgefragt werden und evtl wieder EINE Datei verschoben werden. Das ganze läuft als Loop und soll auch funktionieren, wenn nach dem Start der Batch neue Dateien in den Ordner C:\webcast\Aufnahme hinzugefügt werden.

Hat jemand eine Idee?
Danke im voraus

Content-Key: 95269

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

Printed on: April 25, 2024 at 13:04 o'clock

Member: bastla
bastla Aug 25, 2008 at 15:37:28 (UTC)
Goto Top
Hallo megamazl!

Mein Idee sieht zunächst einmal vor, die Rechnernummer per Schleife zu vergeben - entweder, wie im Beispiel gezeigt, als laufende Nummer von 2 bis 12, oder indem in Zeile 3 alle infrage kommenden Rechner aufgelistet werden, also etwa:
for %%i in (2 3 5 9 11 12) do (
Der Rest sieht so aus:
@echo off & setlocal
:run 
for /l %%i in (2,1,12) do (
    if exist \\192.168.1.%%i\C\CPUnotbusy.txt (
    set done=
    for %%f in (C:\webcast\Aufnahme\*.*) do if not defined done (
        echo %%i: %%f
        move "%%f" \\192.168.1.%%i\C\watchin  
        set done=true
        )
    )
)
sleep 200
goto :run
Grüße
bastla
Member: megamazl
megamazl Aug 25, 2008 at 18:34:36 (UTC)
Goto Top
erstmal Danke für den Ansatz, allerdings verstehe ich diese Schleife nicht so ganz:

set done= 
for %%f in (C:\webcast\Aufnahme\*.*) do if not defined done ( 
echo %%i: %%f 
move "%%f" \\192.168.1.%%i\C\watchin   
set done=true 

Er verschiebt auch keine Datei.
Könntest du mir diese Schleife mal genauer erklären?
Member: bastla
bastla Aug 25, 2008 at 18:46:09 (UTC)
Goto Top
Hallo megamazl!

Die Variable %done% wird als Schalter verwendet - wenn die erst(best)e Datei zum Rechner mit der IP 192.168.1.%%i verschoben wurde, sollen alle anderen, die sich aus dem Suchmuster "C:\webcast\Aufnahme\*.*" ergeben, nicht mehr verschoben werden.
Dies soll erreicht werden, indem der Schalter zunächst gelöscht wird ("set done=") und nach dem Verschieben der ersten Datei (mit einem beliebigen Inhalt) gesetzt wird. Für alle weiteren Dateien werden dann die Zeilen 7 bis 9 nicht mehr ausgeführt.
Ändere zum Testen das "echo off" in ein "echo on" und schau mal, ob Du so den Fehler findest (bei mir hat das nämlich funktioniert) ...

Grüße
bastla
Member: megamazl
megamazl Aug 26, 2008 at 09:25:47 (UTC)
Goto Top
tja, auf einmal funktioniert es, weiß auch nicht, woran es gelegen hat.
Vielen vielen Dank