Dateien umbennen falls nummer schon vorhanden..
hallo,
ich bräuchte hilfe bei folgendem scenario:
annahme:
im verzeichnis c:\temp\
liegen dateien mit 000_xyz.dat wobei xyz im grunde fortlaufende nummern sind.
diese möchte ich in das verzeichnis c:\archiv verschieben.
bis hier ist es ja kein problem.
wenn aber in c:\archiv schon die datei existiert, soll die zu verschiebenden dateien hintendrangehängt werden.
also wenn zb im archiv die dateien von 000_000.dat bis 000_123.dat existieren,
und in c:\temp\ dateien mit 000_000.dat bis 000_009.dat liegen, sollen diese ab 000_124.dat anfangen und danach dorthin verschoben werden.
wäre für eure hilfe sehr dankbar.
gruss
[Edit Biber] ich hasse Umbennungen... nein, ich benn das jetzt nicht um...*grmpfff* [/Edit]
ich bräuchte hilfe bei folgendem scenario:
annahme:
im verzeichnis c:\temp\
liegen dateien mit 000_xyz.dat wobei xyz im grunde fortlaufende nummern sind.
diese möchte ich in das verzeichnis c:\archiv verschieben.
bis hier ist es ja kein problem.
wenn aber in c:\archiv schon die datei existiert, soll die zu verschiebenden dateien hintendrangehängt werden.
also wenn zb im archiv die dateien von 000_000.dat bis 000_123.dat existieren,
und in c:\temp\ dateien mit 000_000.dat bis 000_009.dat liegen, sollen diese ab 000_124.dat anfangen und danach dorthin verschoben werden.
wäre für eure hilfe sehr dankbar.
gruss
[Edit Biber] ich hasse Umbennungen... nein, ich benn das jetzt nicht um...*grmpfff* [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 79431
Url: https://administrator.de/forum/dateien-umbennen-falls-nummer-schon-vorhanden-79431.html
Ausgedruckt am: 24.12.2024 um 14:12 Uhr
14 Kommentare
Neuester Kommentar
Hallo minicoop!
Etwa so:
Anmerkung: Die Stellenanzahl (3) für die laufende Nummer habe ich (in der letzten Zeile) konstant eingetragen, um nicht "delayedexpansion" verwenden zu müssen.
Grüße
bastla
Etwa so:
@echo off & setlocal
set "Source=C:\temp"
set "Target=C:\archiv"
set Prefix=000
set Delim=_
set Ext=.dat
for /f "tokens=2 delims=%Delim%." %%i in ('dir /b /on "%Target%\%Prefix%%Delim%*%Ext%"') do set N=%%i
for /f "tokens=2 delims=%Delim%." %%i in ('dir /b /on "%Source%\%Prefix%%Delim%*%Ext%"') do call :ProcessFile %%i
goto :eof
:ProcessFile
set /a N+=1
set "No=00000%N%"
move "%Source%\%Prefix%%Delim%%1%Ext%" "%Target%\%Prefix%%Delim%%No:~-3%%Ext%"
Grüße
bastla
@Biber
Grüße
bastla
Einen Unterschied bzw. einen Grund zur Unterscheidung von ...gibt es aber nicht, oder?
Da ich %Delim% in den Schleifen verwende, eigentlich doch - insofern vielleicht eherset Part=000
set Delim=_
set Prefix=%Part%%Delim%
Grüße
bastla
Hallo minicoop!
Ändere die Zeile
auf die folgenden Zeilen:
Erklärung: MS hatte die Königsidee, Oktalzahlen mit dem Präfix "0" zu versehen - daher werden "000" bis "007" richtig interpretiert, "008" aber nicht mehr. Das Ergebnis: Die höchste Zahl wird mit 0 ermittelt, und daher beginnt die Zählung von vorne und die vorhandenen Dateien werden überschrieben.
Solltest Du irgendwann mit dreistelligen Nummern nicht mehr auskommen, müsstest Du auch die Zeile
auf die höhere Stellenanzahl anpassen.
Grüße
bastla
Ändere die Zeile
for /f "tokens=2 delims=%Delim%." %%i in ('dir /b /on "%Target%\%Prefix%%Delim%*%Ext%"') do set N=%%i
for /f "tokens=2 delims=%Delim%." %%i in ('dir /b /on "%Target%\%Prefix%%Delim%*%Ext%" 2^>nul') do set N=1%%i
set /a N-=1000
if %N% lss 0 set N=0
Solltest Du irgendwann mit dreistelligen Nummern nicht mehr auskommen, müsstest Du auch die Zeile
set /a N-=1000
Grüße
bastla
Hallo minicoop!
@miniversum
Grüße
bastla
set "Source=C:\Program Files" findet das verzeichnis nicht mehr.
Sollte eigentlich kein Problem sein - bei mir funktioniert's (mit dem von mir geposteten Code). Stell doch bitte Deine momentane Batchversion herein ...@miniversum
Ich glaub diese Idee stamt nicht von MS ;)
Na dann geht's mir doch gleich wesentlich besser damit ...Grüße
bastla
Moin Nedim,
schau Dir mal am CMD-Prompt die Hilfen zu "cd" und "PopD/PushD" jeweils mit "help cd" bzw "help pushd" etc. an.
Und ändere dann die Zeile
Aber versuch erst zu verstehen, was der Unterschied ist... sonst noch mal nachfragen.
Grüße
Biber
schau Dir mal am CMD-Prompt die Hilfen zu "cd" und "PopD/PushD" jeweils mit "help cd" bzw "help pushd" etc. an.
Und ändere dann die Zeile
cd %ziel%
inPushD "%ziel%"
...oder wenigstens (zweite Wahl) in ...cd /d %ziel%
Aber versuch erst zu verstehen, was der Unterschied ist... sonst noch mal nachfragen.
Grüße
Biber
Hallo minicoop!
und die "move"-Zeile wäre dann
aber wenn's nicht an den fehlenden Anführungszeichen gelegen sein sollte, wüsste ich im Moment auch nicht, wo's klemmt ...
Du könntest aber einmal ein "echo" vor die Zeile schreiben - dann wird sie nur angezeigt, und Du siehst hoffentlich, woran es scheitert.
Grüße
bastla
wenn ich jetzt irgendwann auf 000_wxyz.dat gehen würde, müsste ich set /a N-=1000 anpassen
Soferne Du mit "wxyz" vierstellige Nummern meinst: ja. Anzupassen wäre die "set"-Zeile aufset /a N-=10000
move "%temp%\%Prefix%%Delim%%1%Ext%" "%ziel%\%ziel1%\%Prefix%%Delim%%No:~-4%%Ext%"
die abfrage ... REM Prüfung ob Ziel überhaupt vorhanden
... hätte ich zwar umgekehrt formuliert, alsoif not exist "%Quelle%\*%Ext%" goto :eof
Du könntest aber einmal ein "echo" vor die Zeile schreiben - dann wird sie nur angezeigt, und Du siehst hoffentlich, woran es scheitert.
Grüße
bastla