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-Key: 83603

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

Printed on: April 27, 2024 at 01:04 o'clock

Member: bastla
bastla Mar 20, 2008 at 16:33:08 (UTC)
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
Member: Herby-z
Herby-z Mar 21, 2008 at 07:10:08 (UTC)
Goto Top
Super funktioniert genau wie ich wollte.
Ich wusste auf euch ist Verlass.

Gruss
Herby
Member: Biber
Biber Mar 21, 2008 at 14:07:53 (UTC)
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