herby-z
Goto Top

Batch Prüfen ob Datei bereits in Ordner

Hallo Allerseits,

ich habe vor einiger Zeit mit euerer Hilfe folgendes Batchprogramm erstellt.
(Dateien mit der Bezeichnung 10000.tif bis 20000.tif werden von C:\Start in den Ordner C:\Ziel\Nummer\ verschoben)


::----snipp MoveIntoRechNo.bat

@echo on & setlocal enableDelayedExpansion & set "target=C:\Ziel" & set "src=C:\Start"
For /l %%i in (1000010000,1,1000020000) do set "fn=%%i" && if exist "%src%\!Fn:~-9!.*" (
if not exist "%target%\!Fn:~1,9!" md %target%\!Fn:~1,9!
move /-y %src%\!Fn:~-9!.* %target%\!Fn:~1,9!\ >nul && echo Gemoved: %target%\!Fn:~1,9!\!Fn:~-9!.*
)


Leider habe ich damals nicht daran gedacht überprüfen zu lassen ob die Datei bereits im Zielordner vorhanden ist.
Deshalb bleibt das Programm beim vorhandensein der Datei einfach stehen.

Ich würde jetzt gerne entweder diese Nummer überspringen oder besser noch diese Datei umbenennen
(z.B. die Datei 10000.tif gibt es bereits im Ordner C:\Ziel\10000\ dann soll entweder die neue oder bestehende Datei auf 10000_1.tif umbenannt werden bzw. wenn 10000_1.tif auch vorhanden dann 10000_2.tif)

Da ich in der Batcherstellung ein ziemliches Greenhorn bin hoffe ich das Ihr mir auch dieses mal weiterhelft.


Mit bestem Dank
Herby_z

Content-ID: 83603

Url: https://administrator.de/forum/batch-pruefen-ob-datei-bereits-in-ordner-83603.html

Ausgedruckt am: 23.12.2024 um 17:12 Uhr

bastla
bastla 20.03.2008 um 17:33:08 Uhr
Goto Top
Hallo Herby_z!

Ich habe mal Biber's doch recht kompakten Code ein wenig aufgedröselt und (hoffentlich) Deinem Wunsch entsprechend ergänzt:
@echo off & setlocal
set "target=C:\Ziel"  
set "src=C:\Start"  

for /l %%i in (1000010000,1,1000020000) do set "Fn=%%i" & call :ProcessFolder  
goto :eof

:ProcessFolder
if not exist "%src%\%Fn:~-9%.*" goto :eof  
set "TargetFolder=%target%\%Fn:~1,9%"  
if not exist "%TargetFolder%" md "%TargetFolder%"  
for %%j in ("%src%\%Fn:~-9%.*") do call :ProcessFile "%%~fj"  
goto :eof

:ProcessFile
set Suffix=
set /a Counter=0

:Loop
if not exist "%TargetFolder%\%~n1%Suffix%%~x1" goto :MoveIt  
set /a Counter+=1
set "Suffix=_%Counter%"  
goto :Loop

:MoveIt
move /-y %1 "%TargetFolder%\%~n1%Suffix%%~x1">nul && echo Moved: "%TargetFolder%\%~n1%Suffix%%~x1"  
goto :eof

Grüße
bastla
Herby-z
Herby-z 21.03.2008 um 08:10:08 Uhr
Goto Top
Super funktioniert genau wie ich wollte.
Ich wusste auf euch ist Verlass.

Gruss
Herby
Biber
Biber 21.03.2008 um 15:07:53 Uhr
Goto Top
@bastla
Ich habe mal Biber's doch recht kompakten Code...
*rotwerd*
Nenn es ruhig beim Namen... der damals von mir gepostete Schnipsel ist nicht lesbar oder wartbar, enthält keine Kommentarzeilen und nach 3 Monaten geht Neuschreiben eines anderen Batches schneller als das Nachvollziehen des Krypto-Codes.

Passiert manchmal im Verlauf einer angeregten Diskussion...

Danke jedenfalls für die Anpassung und Entschlüsselung.

Grüße
Biber