Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Dateinamen kürzen

Mitglied: CrazyCat-1

CrazyCat-1 (Level 1) - Jetzt verbinden

27.04.2006, aktualisiert 24.05.2006, 8283 Aufrufe, 6 Kommentare

Hallo Leute,

ich habe zwar viele Beiträge zum Thema umbenennen von Dateien gefunden, aber keiner der Beiträge konnte mir wirklich bei meinem Problem weiterhelfen, deshalb fange ich einen neuen Beitrag an.

Das Problem ist folgenden:

Ich erhalte Dateien mit einer fortlaufenden Nummer. Diese Nummer soll gestrichen werden, sofern noch keine Datei ohne die Nummer besteht.

Es soll also die Datei xyz_12345.abc in xyz.abc umbenannt werden.
Sobald die Datei xyz.abc verschoben wurde soll die Datei xyz_12346.abc in xyz.abc umbenannt werden usw.

Zeitgleich soll es auch möglich sein die Datei xzy_12348.abc in xzy.abc umzubenennen, da diese Datei nicht die Datei xzz.abc überschreiben würde.


Die Nummern müssen nicht zwangsweise ansteigend sein, d.h. es kann vorkommen das die Dateien 00002.....010000 bereits umbenannt wurden und erst später die Datei 000001 in den Ornder geschoben wird.


Die Dateinamen sind leider nicht bekannt, xyz steht also für eine beliebige Dateibezeichnung. Die Dateiendung .abc ist hingegegen ständig die gleiche.



Hat jemand eine Lösung für dieses Problem?
Mitglied: Tundra
27.04.2006 um 12:45 Uhr
Hi,

Deine Beschreibung ist noch nicht ganz klar.
Im zweiten Satz schreibst, Du Nummer soll gestrichen werden, wenn es noch keine Datei mit diesem Namen gibt.
Was soll passieren, wenn es diesen Namen schon gibt, soll die Nummer erhalten bleiben?

Aber das ist doch alles kein Problem.
Nach Deiner Beschreibung gibt es im Dateinamen einen Unterstrich, auf Basis dieses Striches kann man Name und Nummer trennen (mit vorheriger Prüfung, dass der Name noch frei ist).
Anschließend wird die Datei verschoben und mit der nächsten Datei weitergemacht.
Während das Script läuft, würde ich keine Dateien per Hand entfernen.
Das ganze dauert je nach Anzahl der Dateien nur wenige Sekunden.

Entweder stößt Du dann das Script immer mal wieder per Hand an oder läßt es als Endlosschleife laufen.

Bei Fragen zum Script einfach melden.

Grüße
Guido
Bitte warten ..
Mitglied: CrazyCat-1
27.04.2006 um 12:50 Uhr
Danke für die schnelle Antwort!

Es soll auf jeden Fall als Endlosschleife laufen, da ich nicht pro Tag 30.000 Dateien per Hand umbenennen will oder den Batch jedes Mal neu anstossen will.

Wenn der Dateiname existiert dann soll mit der Umbenennung der Dateien gewartet werden, bis die Datei vom System übernommen und gelöscht wurde.

Dies soll ein Gegenseitiges überschreiben der Dateien verhindert.

Würde die Datei xyz.abc bereits bestehen und ich eine Datei in diesen Namen umbenennen könnte es vorkommen das ich die Datei xyz.abc überschreibe, bevor diese übernommen wurde.

Ist es jetzt etwas klarer?

Wie kann ich den Unterstrich finden und alle Zeichen nach dem Unterstrich (sowie den Unterstrich selbst) entfernen? (mit Ausnahme der Dateiendung .abc)

Was ich noch vergessen habe: Es existiert in dem Ordner immer eine Datei mit dem xyz.bcd, also eine Datei mit dem Namen ohne der fortlaufenden Nummer, aber mit einer anderen Dateiendung.
Es soll nicht überprüft werden, ob diese Datei bereits existiert.
Bitte warten ..
Mitglied: Tundra
27.04.2006 um 15:52 Uhr
01.
'Dateinamen verändern und Dateien verschieben' 
02.
'27.04.06/ge' 
03.
 
04.
const C_Quelle = "c:\temp" 
05.
const C_Ziel = "c:\Log" 
06.
const C_Log = "c:\Log\rename.log" 
07.
const C_Erw = "txt" 
08.
 
09.
DIM O_FSO 
10.
DIM O_Log 
11.
 
12.
Set O_FSO = CreateObject("Scripting.FileSystemObject") 
13.
if Not O_FSO.FolderExists("c:\Log") then 
14.
  O_FSO.CreateFolder("c:\Log") 
15.
end if 
16.
Set O_Log = O_FSO.OpenTextFile(C_Log,2,true) 
17.
 
18.
call S_CheckFile 
19.
 
20.
'################' 
21.
'Dateien einlesen' 
22.
sub S_CheckFile 
23.
  on error resume next 
24.
  DIM O_Dir 
25.
  DIM O_Datei 
26.
  DIM O_Move 
27.
  DIM L_Split 
28.
  DIM L_DateiNeu 
29.
  DIM L_DateiAlt 
30.
  DIM L_MoveQuelle 
31.
  DIM L_MoveZiel 
32.
  set O_Dir = O_FSO.GetFolder(C_Quelle) 
33.
   
34.
  for each O_Datei in O_Dir.files 
35.
    if instr(O_Datei.Name,"_") > 0 then 
36.
        L_Split = Split(O_Datei.Name,"_") 
37.
        L_DateiNeu = C_Ziel & "\" & L_Split(0) & "." & C_Erw 
38.
        if O_FSO.FileExists(L_DateiNeu) then 
39.
            O_Log.writeline "ACHTUNG: Die Datei " & O_Datei.Name & " kann nicht umbenannt werden, da die Datei " & L_Split(0) & "." & C_Erw & " im Ziel existiert!" 
40.
            O_Log.writeline "" 
41.
        elseif O_FSO.FileExists(C_Quelle & "\" & L_Split(0) & "." & C_Erw) then 
42.
            O_Log.writeline "ACHTUNG: Die Datei " & O_Datei.Name & " kann nicht umbenannt werden, da die Datei " & L_Split(0) & "." & C_Erw & " in der Quelle existiert!" 
43.
            O_Log.writeline "" 
44.
        else 
45.
            L_DateiAlt = O_Datei.Name 
46.
            O_Datei.Name = L_Split(0) & "." & C_Erw 
47.
            if err.number <> 0 then 
48.
              O_Log.writeline "FEHLER beim umbenennen von: " & C_Quelle & "\" & L_DateiAlt 
49.
              O_Log.writeline "   " & err.description 
50.
            else 
51.
              O_Log.writeline L_DateiAlt & "' umbenannt in '" & L_Split(0) & "." & C_Erw & "'" 
52.
              L_MoveQuelle = C_Quelle & "\" & L_Split(0) & "." & C_Erw 
53.
              L_MoveZiel = C_Ziel & "\" 
54.
              Set O_Move = O_FSO.GetFile(L_MoveQuelle) 
55.
              O_FSO.moveFile L_MoveQuelle, L_MoveZiel 
56.
              if err.number <> 0 then 
57.
                O_Log.writeline "  FEHLER beim verschieben" 
58.
                O_Log.writeline "   " & err.description 
59.
              else 
60.
                O_Log.writeline "   " & L_Split(0) & "." & C_Erw & " verschoben nach " & C_Ziel 
61.
              end if 
62.
              set O_Move = nothing 
63.
            end if 
64.
            O_Log.writeline "" 
65.
        end if 
66.
    end if 
67.
  next     
68.
  on error goto 0 
69.
end sub
[Edit] Biber: auf "code" umformatiert, damit "die Einrückungen erhalten bleiben".[/Edit]
Bitte warten ..
Mitglied: Tundra
27.04.2006 um 15:58 Uhr
Hi,

schicke mir einfach eine PN mit Deiner Mail-Adresse, dann schicke ich Dir den Code noch mal per Mail, damit die Einrückungen erhalten bleiben.

Bei den Konstanten gibst Du Quelle und Ziel an, sowie die Dateierweiterung.
Im Quell-Ordner werden alle Dateien mit einem Unterstrich herausgepickt.
Danach wird geguckt, ob der gekürtze Namen im Quellverzeichnis oder im Zielverzeichnis existiert.
Wenn nicht, wird die Datei im Quellverzeichnis umbenannt und anschließend kopiert.

Mit jedem Lauf wird eine neues Logfile in c:\Log angelegt, das sämtliche Aktionen protokolliert.

Kopiere am Besten den Ordner mit den Dateien woanders hin und mache mal ein paar Testläufe, wenn Du damit zufrieden bist, kannst Du Dir immer noch überlegen, ob das mit einer Endlosschleife verbunden wird, oder ob Du das Script lieber z. B. alle paar Stunden einmal ausführst.

Grüße
Guido
www.code-master.de
Bitte warten ..
Mitglied: Biber
27.04.2006 um 21:58 Uhr
Moin Crazy,
als Batch wäre das (theoretisch) folgende Zeile:
01.
::---snipp RenameIfPossible.bat 
02.
(@for /f "delims=_. tokens=1-3" %%i in ('dir /b /o:d *_*.abc') do @if not exist %%i.%%k @rename %%i_%%j.%%k %%i.%%k ) & %0 
03.
::--snapp
Der Batch würde auch immer die "ältesten" Dateien zuerst umbenennen.

Zur Demo am CMD-Prompt:
01.
(=21:35:19  D:\temp\crazy=) 
02.
>for /f "delims=_. tokens=1-3" %i in ('dir /b /o:d *_*.abc') do @if not exist %i.%k @echo rename %i_%j.%k %i.%k 
03.
rename xyz_12346.abc xyz.abc             <---würde auflösen zu diesem Befehl links.
Aber für sinnvoller würde ich schon eine Lösung ähnlich Guido's halten, d.h.
- lesbar und wartbar
- eventuell mit Logdatei - obwohl ich denke, die Info, wie diese Zwischendateien hießen, ist ohne jeglichen Informationsgehalt und von wann die sind, protokolliert sicherlich auch das die verarbeitende Programm.
- und, viel wichtiger, irgendwo noch ein kurzes "Warten" dazwischen sollte rein (im Batch mit TimeOut.exe oder Sleep.exe oder "ping localhost >nul" , in *.vbs mit einer kleiner Zählschleife o. ä.)

Denn sonst ist der Job (egal in welcher Skriptsprache) endlos nur am Verzeichnisinhalt einlesen.. und das macht M$ mit deren selbstgebastelter Ressourcenfreigabe und Speicherdefragmentierung nicht ewig mit. Sprich: der Batch stürzt nach zwei, drei Monaten ab, weil er alle Ressourcen verbraten hat und muss neu gestartet werden.
Ärgerlicher ist dann allerdings, dass alle anderen Prozesse auch keine Ressourcen mehr bekommen und stinkelangsam werden nach ein paar Wochen.

(Frag mal Lonesome Walker, der hat mal einen Batch rekursiv eine 2 GigaByte große Unterverzeichnisstruktur aufbauen lassen über Wochen)

Betrachte also meinen Oneliner eher als Gag - in Deinem Fall sollte schon ein Mehrzeiler (der zwischen der Umbenennerei auch mal Pause macht) die elegantere Lösung sein.

Grüße
Biber
Bitte warten ..
Mitglied: CrazyCat-1
24.05.2006 um 14:30 Uhr
Danke Leute, das Problem ist nach einigen Schwierigkeiten gelöst.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Dateien in Abhängigkeit des Dateinamens auf eine bestimmte Zeichenzahl kürzen und verschieben

gelöst Frage von Booster07Batch & Shell11 Kommentare

Hallo zusammen, ich habe zwei Probleme, bei denen ich auf Eure kompotente Hilfe hoffe: Problem 1: Ich habe sehr ...

Batch & Shell

Beim Batchaufruf durch UAC.ShellExecute nur kurze Dateinamen beim aktuellen Verzeichnis

gelöst Frage von anmelderBatch & Shell1 Kommentar

Hallo, meine Batch muß Adminrechte haben und ich benötige den gesamten Pfad in dem die Batch ausgeführt wird. Die ...

PHP

Array kürzen

gelöst Frage von dax4funPHP6 Kommentare

Es tut was es soll, aber kann man das irgendwie kürzen da ich jede mögliche art versucht habe Arrays ...

Windows Server

Dateiname zu lang

gelöst Frage von nooneelsebutmeWindows Server3 Kommentare

Hallo, habe Daten von einem Server 2008 R2 auf einen Server 2016 ES per robocopy migriert. Hat alles Problemlos ...

Neue Wissensbeiträge
Backup

2016 - Restore mit WBAdmin - iSCSI Device als Sicherungsziel

Erfahrungsbericht von Henere vor 14 StundenBackup1 Kommentar

Servus zusammen, was mich eben einige graue Haare gekostet hat Server 2016. Ich habe meinem Server eine weitere M2 ...

Humor (lol)
(Part num your Hacked phone. +XX XXXXXX5200)
Erfahrungsbericht von Henere vor 2 TagenHumor (lol)5 Kommentare

Mein Handy hat aber ne ganz andere Endnummer. Muss ich mir jetzt Sorgen machen ? :-) Vielleicht betrifft es ...

Exchange Server

Letztes Update für Exchange 2016 CU9 war in gewisser Weise destruktiv

Erfahrungsbericht von DerWoWusste vor 2 TagenExchange Server8 Kommentare

Kurzer Erfahrungsbericht zu Exchange2016-KB4340731-x64 Der Exchangeserver hat wie gewöhnlich versucht, es in der Nacht automatisch zu installieren - abgesehen ...

Erkennung und -Abwehr

Neue Sicherheitslücke Foreshadow (L1TF) gefährdet fast alle Intel-Prozessoren

Information von Frank vor 3 TagenErkennung und -Abwehr3 Kommentare

Eine neue Sicherheitslücke, genannt Foreshadow (alias L1TF) wurde auf der Usenix Security 18 von einem Team internationaler Experten veröffentlicht. ...

Heiß diskutierte Inhalte
Netzwerke
Netzwerk-Architektur mit VLANs
Frage von niLuxxNetzwerke47 Kommentare

Liebe Community, Ich hätte eine kurze Frage an euch. Ich werde in Kürze das Netzwerk unserer (sehr) kleinen Firma ...

Netzwerke
SSH - Wieso werde ich nach VPN Verbindung rausgeschmissen?
Frage von VernoxVernaxNetzwerke10 Kommentare

Hallo, ich habe es endlich geschafft mein Handy mit einer VPN Verbindung an meinen Router anzuschließen. Nach der Login ...

Windows Server
Server 2016 Autotiering Storage Space
Frage von HenereWindows Server9 Kommentare

Servus, ich habe jetzt ein StorageSpace auf einem Server 2016 in Betrieb zum Testen. 1x M2 mit 512GB (970pro) ...

Windows 10
VPN Verbindung Android - Win10 funktioniert nach Update auf Android 8 Oreo nicht mehr
gelöst Frage von OnleinWindows 108 Kommentare

Hallo, SETUP: Ich habe unter Win10 (up to date) einen VPN Server eingerichtet (Eingehende Verbindung). In meinen Routern habe ...