// 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
|
|