Dateien mit Sonderzeichen Umbennenen <|>*?:"
-
Eventuell unterstützt es nur der Windows Explorer nicht, versuch mal in der Windows-Konsole mit dem ren-Befehl etwas umzubenennen.
BTW: FAT32 und NTFS können afaik gar keine Fragezeichen in Dateinamen führen, bist du dir sicher, dass sich das problemlos nach Windows kopieren ließ?
MfG SideWinder
-
SideWinder schrieb:
keine Fragezeichen
NTFS kann das, nur Windows erlaubt das halt nicht.
-
Das NTFS das durchaus kann beweist ja schon die Existenz des Problems

Vermutlich geht es nur nicht mit den von Microsoft vorgesehen Applikationen.
Weder Windows-Explorer noch zum OS gehörige Kommandozeilen-Tools werden "unerwünschte" Zeichen freiwillig unterstützen.Vielleicht gehts mit anderen Dateimanagern (z.B. Windowscommander) ?
Da aber lt. Anforderung viele gleichartige Probleme gelöst werden sollen,
wäre tatsächlich die Frage ob eine eigene auf Win32-API basierende Applikation das nicht doch kann, und welche Systemaufrufe man konkret benötigt.
-
Ich kommt mit Linux so wenig zurecht, ich weis nichtmal, wie ich auf die HDD komme. Umbenennungsversuche 1-3 meines bekannten schlugen auf dieser Konsole fehl, warum aucfh immer.
Ich brauch garnicht erst daran zu denken da was zu machen, drumm dachte ich mir hier hat einer ne lösung für C++ bzw. einen Ansatz, woran ich mich orientieren könnte.
3.000 Dateien mag ich auch nicht per Hand umbenennen.
Dateien umbenennen sollte doch eigentlich einfach gehen?
ersetze in PFAD+Unterordner alle Zeichen < mit (
ersetze in PFAD+Unterordner alle Zeichen > mit ) ... ?
-
Wenn Windows das nicht zulässt, wird's da vermutlich auch schwer. Ich denke die beste Lösung wird sein, das Ganze einfach mit einer Linux-Live-CD umzubenennen. Es gibt bestimmt entsprechende Kommandozeilentools. Genaueres könnte dir vielleicht gesagt werden, wenn das hier mal nach "Rund um den PC" oder so verschoben wird, da hier vermutlich viele Linuxnutzer gar nicht erst reingucken.

-
Habs gerad mal ausprobiert mit MoveFileEx().
Sonderzeichen nimmt er nicht ...
#include "stdafx.h" #include <windows.h> #include <tchar.h> #include <iostream> using namespace std; int _tmain(int argc, TCHAR *argv[]){ BOOL fSuccess = FALSE; if(argc != 3) { wcout << _T("Usage: ") << (TCHAR *)argv[0] << _T(" <sourcefile> <destfile>") << endl; return -1; } TCHAR *SourceFileName = argv[1]; TCHAR *DestFileName = argv[2]; std::locale::global(std::locale("German_germany")); // Moves the file to the new location fSuccess = MoveFileEx(SourceFileName, DestFileName, MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED); if(!fSuccess) { PrintError(TEXT("MoveFileEx failed")); return (9); } else wcout << SourceFileName << _T(" renamed to ") << DestFileName << endl; return (0); }Basis:
http://msdn.microsoft.com/en-us/library/aa363875(v=vs.85).aspx.
-
Wenn ich nur Ahnung davon hätte, ich bin ja eben auf die Umbenennung der Sonderzeichen angewiesen, da nur diese mein Problem darstellen :(.
Ich habe ein Script für die Verarbeitung auf Linux ebene, das so modifiziert wurde, dass es eben diese Aufgabe meistern könnte.
PROBLEME:
1. ich komme nicht auf die HDD via der Konsole (Bash)
2. Ich habe vergessen, wie ich mir die Rechte gebe diese Dateien auch verändern zu dürfen
3. Temporäres Linux (Open Suse 11.4) ist derart instabil, ich kann ncihtmal ein Programm installieren! --> was weis ich :(((... Ich kontakte nochmal mein Cousin, evtl. bekommt er das mittels dieses Bash-Skriptes hin? ... dauert aber ca. 1-2 Monate sich zu sehen.
Ich glaube ich lerne C++ nie

-
http://www.ubuntu.com/download/ubuntu/download
https://help.ubuntu.com/community/LiveCDAnsonsten sollte jedes deiner Probleme in kürzester Zeit lösbar sein, wenn du einfach Google nutzen würdest.
http://www.tim-bormann.de/sammlung-konsolen-befehle-linux/
-
Habe es nicht ausprobiert, aber laut "google" soll es möglich sein solche Dateien über den "shortname" zu öffnen und zu lesen und umzubenennen.
Also mit
dir /xkurzen Dateinamen anzeigen lassen und dann umbenennen.
Wenn das geht, könnte man wohl auch ein Programm schreiben das es automatisch erledigt.
---
Wenn es keine kurzen Dateinamen gibt, würde auch eine Umbenennung mit
Unicode Pfad eventuell helfen. Laut Google soll das viele Einschänkungen
umgehen:Beispiel:
copy "\?\C:\Source\Cowboys Gang?.ogg" "\?\C:\Dest\Cowboys Gang.ogg"
Der Pfad muss fabei allerdings KOMPLETT angegeben werden und der Pfad sollte nicht gleich sein.
-
Ich scheine echt zu dämlich zu sein Linux zu nutzen!
A Ich hatte Suse 11.4 installiert. Dies hatte die Externe HDD automatisch gemountet. Ich konnte allerding über Terminal (Bash) nicht zu diesem Ort der HDD navigieren, da dieser nur über den Filemanager erreichbar war!
das Script von der Externen HDD zu starten schlug fehl, ich muss es erst "Ausführbar" machen.
B Die Live CD hat zwar ein Terminal installiert (ebenfalls Bash), aber ich komme nicht dazu dies zu öffnen! Ich finde einfach keine Schaltfläche dies zu öffnen :(((
C Ich dachte mir, da ich eh gerne C++ lernen möchte, dass dies ein guter Einstieg währe, wenn jemand ein Skript in dieser Richtung hätte. Das Lernen dieser Sprache hätte dann wenigstens gleich einen Sinnzusammenhang, wo ich verständlicher, plastischer lernen kann.

Hat nicht einer ne Idee? ist ein umbenennen so komplex? ... wenn ja, hebe ich mir die Welt von C zu bunt gemalt.

-
Data_191088 schrieb:
Ich scheine echt zu dämlich zu sein Linux ...
Hat nicht einer ne Idee? ist ein umbenennen so komplex? ... wenn ja, hebe ich mir die Welt von C zu bunt gemalt.

Die Welt von C ist vermutlich zu bunt für dich. Linux ist definitiv die "billigere" Variante, da man die Bedeutung von Sonderzeichen einfacher
überwinden kann.Ich hatte Dir einige Anregungen gegeben was man in Deinem Fall unter Windows
versuchen könnte. Leider habe ich keine Sonderzeichen auf der Platte zum selbst testen
Verstehst du unter Skript eigentlich ein Shell-Skript, oder C-Quelltext ??
-
Ein Linux-shell Skript.
-
Data_191088 schrieb:
Hat nicht einer ne Idee? ist ein umbenennen so komplex? ... wenn ja, hebe ich mir die Welt von C zu bunt gemalt.

Umbenennen selbst ist ganz einfach.
#include <windows.h> int main() { ::MoveFileW(L"alter name", L"neuer name"); }Tadaa.
Das Problem ist bloss, dass die ganzen Usermode APIs ala MoveFileW() schon nicht mit diversen Zeichen in File-/Verzeichnisnamen klarkommen. Etwas verbessern lässt sich die Sache wenn man den
\\?\Prefix verwendet. Aber selbst damit kommen die Funktionen mit manchen Dingen nicht klar.-> verwende Linux
Unter Linux kannst du dann, wenn du unbedingt willst, ein C Programm verwenden. Nur dass es Sprachen gibt die einfacher zu lernen sind als C: Bash, Python, Java u.v.m.