Source file: /~heha/mb-iwp/Triggerkarte/renuniq.zip/renuniq.cpp

// renuniq.cpp: Umbenennen einer Datei durch Anhängen von Zahlen,
// bis keine Datei überschrieben werden muss

#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NON_CONFORMING_SWPRINTFS
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <shlwapi.h>
#define T(x) TEXT(x)

int usage(LPCTSTR msg=NULL) {
 _tprintf(T("Umbenennen zu einzigartiger Datei mit lfd. Dezimalzahl, H. Haftmann, Mai 2007\n")
          T("[optionen] Quelldateiname [Zieldateiname]\n")
          T("/1 ... /6 = Feldbreite fuer lfd. Nummer, bspw. /3 ergibt 001, 002 usw.\n")
          T("/t = benutze Datum + Uhrzeit der Datei (nicht implementiert)\n"));
 if (msg) _tprintf(T("%s!\n"),msg);
 return 2;
}

int _cdecl _tmain(int argc, _TCHAR* argv[]) {
 if (argc<2) return usage(T("Dateiname angeben"));
 LPTSTR SrcFileName=NULL;
 LPTSTR DstFileName=NULL;
 int feldlen=0;
 bool UseFileTime=false;
 for (int i=1; i<argc; i++) {
  switch (argv[i][0]) {
   case '-':
   case '/': switch (argv[i][1]) {
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6': feldlen=argv[i][1]-'0'; break;
    case 'T':
    case 't': UseFileTime=true; break;
    case 'H':
    case 'h': return usage();
    default: return usage(T("Falsche Option"));
   }break;
   default: {
    if (SrcFileName) {
     if (DstFileName) return usage(T("Zu viele Dateinamen angegeben"));
     DstFileName=argv[i];
    }else{
     SrcFileName=argv[i];
    }
   }
  }
 }
 if (!SrcFileName) return usage(T("Dateiname angeben"));
 if (!DstFileName) DstFileName=SrcFileName;
 PathUnquoteSpaces(SrcFileName);
 PathUnquoteSpaces(DstFileName);
 unsigned number=1;
 for(;;){
  TCHAR DstBuf[MAX_PATH];
  DWORD ext=(DWORD)(PathFindExtension(DstFileName)-DstFileName);
  lstrcpy(DstBuf,DstFileName);
  lstrcpy(DstBuf+ext+_stprintf(DstBuf+ext,T("%0*u"),feldlen,number),DstFileName+ext);
  if (MoveFileEx(SrcFileName,DstBuf,MOVEFILE_COPY_ALLOWED)) break;	// alles OK
  DWORD err=GetLastError();
  switch (err) {
   case ERROR_FILE_NOT_FOUND:	// Quelldatei nicht gefunden
   case ERROR_PATH_NOT_FOUND: {
    usage(T("Quelldatei nicht gefunden"));
   }return 1;
   case ERROR_ALREADY_EXISTS: {	// Zieldatei bereits vorhanden: nächste Runde (NICHT bei Datum!!)
    number++;
   }continue;
   default: {	// sonstiger Fehler
    LPTSTR bufptr;
    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
      NULL,err,0,(LPTSTR)&bufptr,0,NULL);
    usage(bufptr);
    LocalFree(bufptr);
   }
  }
 }
 return 0;
}
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded