pingu256
Goto Top

Variable Dateien verschieben nach Abgleich

Hi,

hat jemand einen Tipp für mich wie ich folgendes Problem lösen kann:

In einem Verzeichnis c:\data werden nacheinander (Abstand ca. 2-5 Min.) immer zwei Dateien abgelegt die den gleich Dateinamen aber eine andere Endung haben.

Beispiel:

12345.pdf und 12345.pd$

oder

54321.pdf und 54321.pd$

Wie kann ich einen Scheduler programmieren der mir jede Minute über dieses Verzeichnis läuft und nachschaut ob ein Datenpaar vorhanden ist. Wenn beide Dateien da sind sollen diese in ein anderes Verzeichnis verschoben werden.

Der Dateiname ändert sich jedes mal nur die die Endung ist jedes mal gleich (pdf & pd$).

Gruß
Pingu256

Content-ID: 102197

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

Ausgedruckt am: 20.11.2024 um 13:11 Uhr

Ren
Ren 19.11.2008 um 16:03:37 Uhr
Goto Top
Skizze:
@echo off
set "verzeichnis=e:\pdfs"  
set "ziel=e:\ziel"  
:loop
FOR /F "delims=" %%i IN ('dir %verzeichnis%\*.pdf /b') DO call :handle "%%i"  
ping -w 60000 1.1.1.1 -n 1 >nul
goto :loop

:handle
set "file=%~1"  
set "file2=%~n1.pd$"  
if exist "%verzeichnis%\%file2%" copy "%verzeichnis%\%file2%" "%ziel%\%file2%" & copy "%verzeichnis%\%file%" "%ziel%\%file%" & goto :eof  
goto :eof


:ende
Problem: wenn es mehr Dateien werden, werden alle immer kopiert. ;)
Zitat von @pingu256:
nachschaut ob ein Datenpaar vorhanden ist. Wenn beide Dateien da sind sollen diese in ein anderes Verzeichnis verschoben werden.
Das sollte die Batch aber tun...
bastla
bastla 19.11.2008 um 16:15:57 Uhr
Goto Top
@Ren
Problem: wenn es mehr Dateien werden, werden alle immer kopiert. ;)
... außer, es würde (wunschgemäß) verschoben ... face-wink

Abgesehen davon wäre anzumerken, dass ein "dir /b" (ohne "/s") keinen vollständigen Pfad, sondern nur die Dateinamen liefert - insofern wäre ein
pushd "%verzeichnis%"
vorneweg und das zugehörige
popd
am Ende der einfachere Weg.

Grüße
bastla
Ren
Ren 19.11.2008 um 16:21:50 Uhr
Goto Top
Ich hatte kopiert gelesen, ich bin schon müde. Aber das sollte ja kein Ding sein, ersetzt man copy durch move, wenn man sich sicher ist, dass im Zielverzeichnis nichts kaputt gehen kann, move /y. Sonst müsste man halt vorher noch nachsehen, ob die Datei schon existiert.
@echo off
set "verzeichnis=e:\pdfs"  
set "ziel=e:\ziel"  
:loop
FOR /F "delims=" %%i IN ('dir %verzeichnis%\*.pdf /b') DO call :handle "%%i"  
ping -w 60000 1.1.1.1 -n 1 >nul
goto :loop

:handle
set "file=%~1"  
set "file2=%~n1.pd$"  
if exist "%verzeichnis%\%file2%" move /y "%verzeichnis%\%file2%" "%ziel%\%file2%" & move /y "%verzeichnis%\%file%" "%ziel%\%file%" & goto :eof  
goto :eof


:ende
bastla
bastla 19.11.2008 um 16:25:03 Uhr
Goto Top
@Ren
"move" mit "/y" ist nur am Commandprompt erforderlich - in Batch wird automatisch überschrieben.

Grüße
bastla
Ren
Ren 19.11.2008 um 16:42:07 Uhr
Goto Top
aha. Man lernt täglich etwas neues!
pingu256
pingu256 19.11.2008 um 18:37:39 Uhr
Goto Top
Geil vielen Dank!!! Läuft !!!
pingu256
pingu256 03.02.2009 um 11:53:31 Uhr
Goto Top
Zitat von @Ren:
Ich hatte kopiert gelesen, ich bin schon müde. Aber das sollte ja
kein Ding sein, ersetzt man copy durch move, wenn man sich sicher ist,
dass im Zielverzeichnis nichts kaputt gehen kann, move /y. Sonst
müsste man halt vorher noch nachsehen, ob die Datei schon
existiert.
> @echo off
> set "verzeichnis=e:\pdfs"  
> set "ziel=e:\ziel"  
> :loop
> FOR /F "delims=" %%i IN ('dir %verzeichnis%\*.pdf  
> /b') DO call :handle "%%i"  
> ping -w 60000 1.1.1.1 -n 1 >nul
> goto :loop
> 
> :handle
> set "file=%~1"  
> set "file2=%~n1.pd$"  
> if exist "%verzeichnis%\%file2%" move /y  
> "%verzeichnis%\%file2%" "%ziel%\%file2%" &  
> move /y "%verzeichnis%\%file%" "%ziel%\%file%"  
> & goto :eof
> goto :eof
> 
> 
> :ende
> 



Hi,

hat jemand ne Idee wie ich das Script am geschicktesten verändere wenn ich mehrere Verzeichnisse überwachen möchte?


Aktuell sieht der Code so aus und ich überwache Verzeichnis 1 .. hinzu sollen Verzeichnis 2 bis 7 auch überwacht werden sowie die Dateien entsprechen kopiert werden

@echo off
set "verzeichnis=E:\pool\archiv\1"  
set "ziel=x:\ep1\010\"  
set "ziel2=e:\pool\ablage\1"  
:loop
FOR /F "delims=" %%i IN ('dir %verzeichnis%\*.pdf /b') DO call :handle "%%i"  
ping -w 10000 1.1.1.1 -n 1 >nul
goto :loop

:handle
set "file=%~1"  
set "file2=%~n1.pd$"  
if exist "%verzeichnis%\%file2%"   
	copy /y "%verzeichnis%\%file%" "%ziel%\%file%" &   
	copy /y "%verzeichnis%\%file2%" "%ziel%\%file2%" &   
	move /y "%verzeichnis%\%file%" "%ziel2%\%file%" &   
	move /y "%verzeichnis%\%file2%" "%ziel2%\%file2%" &   
	goto :eof
	goto :eof
:ende

Danke!!!
Gruß

pingu256