Batch: Dateien kopieren und umbenennen
Umlüx 23.10.2012 - 09:46 5311 3
Umlüx
Huge Metal Fan
|
ich hab 2 ordner mit dateien. per batch will ich die dateien aus DirA nach DirB kopieren und wenn sie schon vorhanden sind umbenennen (einfach hinten ein _1 anhängen). soweit so gut... @ECHO OFF
FOR /F "tokens=*" %%1 IN ('dir srcdir /b') DO (
IF EXIST destdir\%%1 (copy srcdir\%%1 destdir\%%1_1
) ELSE (copy srcdir\%%1 destdir)
)
mein problem nun: wenn es die datei_1 auch schon gibt, sollte idealerweise eine datei_2 produziert werden usw... wie lös ich das nun am besten ohne vielfache FOR/IF verschachtelung? irgendwie find ich da grad keinen brauchbaren ansatz ohne mich komplett zu verzetteln
Bearbeitet von Umlüx am 23.10.2012, 13:11
|
COLOSSUS
AdministratorGNUltra
|
Cygwin installieren, dann: for file in DirA/*
do
target="DirB/${file##*/}"
test -f "$target" && target="${target}_1"
while test -f "$target"
do
target="${target%_*}"_"$((${target##*_} + 1))"
done
cp "$file" "$target"
done
|
Umlüx
Huge Metal Fan
|
danke! werde ich wohl verwenden wenn ich gar nicht weiterkomme, denn eigentlich sollte ich auf der maschine nichts installieren. inzwischen hoff ich, doch noch eine simple lösung zu finden ich hab jetzt mal eine primitive zählschleife mit eingebaut und lass eine variable C mitlaufen, die dann zum dateinamen dazu soll: @ECHO OFF
CLS
FOR /F "tokens=*" %%d IN ('dir srcdir /b') DO (
echo checking %%d
IF EXIST destdir\%%d (
echo %%d existiert schon
SET C=1
FOR /L %%e IN (1, 1, 10) DO (
IF EXIST destdir\%%d_%%e (
echo %%d_%%e existiert auch
SET /A C+=1
)
)
ECHO kopiere %%d_%C%
) ELSE (
echo %%d existiert noch nicht
echo kopiere %%d
)
echo.
)
und die ausgabe davon sieht für meine testfiles dann so aus: (file1 existiert noch nicht, file2 einmal, file3 zweimal...) checking file1.001
file1.001 existiert noch nicht
kopiere file1.001
checking file2.001
file2.001 existiert schon
kopiere file2.001_3
checking file3.001
file3.001 existiert schon
file3.001_1 existiert auch
kopiere file3.001_3
checking file4.001
file4.001 existiert schon
file4.001_1 existiert auch
file4.001_2 existiert auch
kopiere file4.001_3
die IF EXIST checks funktionieren, aber irgendwie hat die hilfsvariable C immer den größtmöglichen wert EDIT: ich mach irgend einen grundsätzlichen fehler mit der variable.. C wäre schon 3 wenn ich die variable direkt nach dem SET C=1 per echo ausgebe...
Bearbeitet von Umlüx am 23.10.2012, 12:02
|
Umlüx
Huge Metal Fan
|
|