"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Batch: Dateien kopieren und umbenennen

Umlüx 23.10.2012 - 09:46 5311 3
Posts

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8964
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...
Code: BATCH
@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

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Cygwin installieren, dann:

Code: SHELL
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
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8964
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:
Code: BATCH
@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...)
Code:
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 :confused:

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
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8964
ok, problem und lösung gefunden...
http://de.wikibooks.org/wiki/Batch-...e_mit_Variablen
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz