Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Dateien nach Ordner umbenennen

Frage Entwicklung Batch & Shell

Mitglied: Schnubbi8718

Schnubbi8718 (Level 1) - Jetzt verbinden

22.06.2011 um 13:57 Uhr, 4569 Aufrufe, 7 Kommentare

Tach, ich suche eine Möglichkeit Dateien in einem Ordner nach dem Ordnernamen umzubenennen. Und wenn weitere Dateien vorhanden sind, sollten die nach Gröse Sortiert (größtes zuerst) dann das nächst kleinere mit "-2" "-3" enden. Das alles in eine Schleife gepackt, damit ich das bei vielen Ordnern machen kann.

Zum verständnis nochmal:

ordner 1
---DateiX
---DateiY
Ordner 2
---DateiL
---Datei A
---Datei B


Wird zu
Ordner 1
---Ordner 1
---Ordner 1-2
Ordner 2
---Ordner 2
---Ordner 2-1
---Ordner 2-2

Hab hier schon mal ein Gerüst.
01.
@echo off 
02.
FOR /F "delims=" %%i in ('dir /B /AD') do ( 
03.
FOR /F "delims=" %%j in ('dir "%%i" /B /A-D') do rename "%%i\%%j" "%%i%%~xj" 
04.
)
Der Code benennt meine Dateinamen so um, dass sie heißen wie der Ordner, in dem sie sich befinden. Leider aber nur je eine Datei pro Endung. Jetzt kommt halt imme die Meldung dass die Datei schon vorhanden ist (wenn mehrere gleiche endungen vorhanden sind). Und da würde ich euch bitten mir weiter zu helfen.

Danke
Greez Schnubbi8718
Mitglied: Friemler
22.06.2011 um 14:38 Uhr
Hallo Schnubbi,

könnte so gehen:
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
 
06.
set "SrcDir=E:\test" 
07.
 
08.
 
09.
for /f "delims=" %%d in ("%SrcDir%") do set "ParentDir=%%~nxd" 
10.
 
11.
for /f "delims=" %%f in ('dir /b /a:-d "%SrcDir%" 2^>NUL') do ( 
12.
  set "Item=%%~xf" 
13.
  call :ConcatString Extensions 
14.
15.
 
16.
for %%e in (%Extensions%) do ( 
17.
  set /a Cntr=1 
18.
  set "Ext=%%e" 
19.
 
20.
  for /f "delims=" %%f in ('dir /b /o:-s /a:-d "%SrcDir%\*%%e" 2^>NUL') do ( 
21.
    set "File=%SrcDir%\%%f" 
22.
    call :RenameFile 
23.
    set /a Cntr+=1 
24.
25.
26.
 
27.
exit /b 
28.
 
29.
 
30.
 
31.
:RenameFile 
32.
  ren "%File%" "%ParentDir%-%Cntr%%Ext%" 
33.
exit /b 
34.
 
35.
 
36.
 
37.
:ConcatString 
38.
  call set "Compare1=%%%1%%" 
39.
  call set "Compare2=%%%1:%Item%=%%" 
40.
  if "%Compare1%" neq "" if "%Compare1%" neq "%Compare2%" exit /b 
41.
  call set "%1=%%%1%% %%Item%%" 
42.
exit /b
In Zeile 9 wird der Name des Verzeichnisses ermittelt, das die umzubenennenden Dateien enthält.

In der FOR-Schleife in den Zeile 11 bis 14 werden alle vorkommenden Dateiendungen ermittelt. und in der Variablen Extensions durch Leerzeichen getrennt abgelegt. Das eigentliche Zusammensetzen der Variablen wird im Unterprogramm ConcatString erledigt, das den Namen der zusammenzusetzenden Variablen als Parameter erwartet.

Die einzelnen Erweiterungen werden von der FOR-Schleife in Zeile 16 abgearbeitet.

Die FOR-Schleife in Zeile 20 ermittelt alle Dateien mit der gerade aktuellen Erweiterung absteigend sortiert nach Größe und ruft das Unterprogramm RenameFile auf, wo die Umbenennung stattfindet.

Die erste Datei eines Typs erhält also schon den Zusatz -1. Ich hoffe das ist auch in Ordnung.

Wenn die Nummerierung unabhängig vom Dateityp sein soll, musst Du Dich nochmal melden.

Gruß
Friemler


[EDIT]
Script geändert:
Jeder Dateityp wird jetzt nur noch einmal in die Variable Extensions eingetragen. Dadurch werden überflüssige Umbenennungsversuche vermieden.
[/EDIT]
Bitte warten ..
Mitglied: Skyemugen
22.06.2011 um 14:46 Uhr
Aloha Schnubbi8718 und willkommen im Forum,

Zitat von Friemler:
Wenn die Nummerierung Typunabhängig sein soll, musst Du Dich nochmal melden.

Was natürlich nicht bedeutet: „Wenn es passt, sehen wir eventuell einen grünen Haken aber dich nie wieder“ ... wie es leider so oft vorkommt ... was ist schon Feedback

greetz André
Bitte warten ..
Mitglied: Schnubbi8718
22.06.2011 um 15:05 Uhr
Vielen Dank für die schnelle Antwort. Aber könntest du noch eine Kleinigkeit dran ändern?

Das bezieht sich jetz immer nur auf ein Verzeichnis. Mein Problem ist, dass ich etwa 900 Verzeichnisse habe. Da müsste ich jetzt für jedes verzeichnis die batch an der stelle set "SrcDir=E:\test" verändern, oder?
Gibts ne möglichkeit, dass ich auf dem nächsten übergeordneten Ordner die batch Datei lege, und die batch macht dann alle Ordner eine "Etage" tiefer durch?

Vielen Dank
Bitte warten ..
Mitglied: 60730
22.06.2011 um 15:14 Uhr
moin,

"eigentlich" schreiben wir doch, um anderen einen Tipp zu geben und nicht, weil wir deren Arbeit machen und weil wir ausschliesslich an den batchen die Änderungsrechte haben.

  • Im ernst - du willst das für dich und du mußt im Zweifel mal was ändern und dann ist keiner hier?

So geht das nicht...
Hast du dir die restlichen Beiträge vom Friemler mal angesehen?
AFAIK hat der eine Anleitung für die Schleifchen hier hingemalt....

Das bezieht sich jetz immer nur auf ein Verzeichnis. Mein Problem ist, dass ich etwa 900 Verzeichnisse habe.
Geht das irgendwie genauer?

  • Hast du eine Liste die abgearbeitet werden soll?
  • Sind das eh alle?
  • Gibt es eine Ausschlußliste, die nicht abgearbeitet werden soll?
Bitte warten ..
Mitglied: Friemler
22.06.2011 um 15:19 Uhr
Hallo Schnubbi,

Ok, ist nur eine kleine Erweiterung. Nimm das folgende Script. Wundere Dich aber nicht, wenn das bei der Datenmenge eine Weile dauert.
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
 
06.
set "SrcDir=E:\test" 
07.
 
08.
for /d %%d in ("%SrcDir%\*.*") do ( 
09.
  set "ActDir=%%d" 
10.
  call :ProcessDir 
11.
12.
 
13.
exit /b 
14.
 
15.
 
16.
 
17.
:ProcessDir 
18.
  for /f "delims=" %%f in ("%ActDir%") do set "ParentDir=%%~nxf" 
19.
 
20.
  for /f "delims=" %%f in ('dir /b /a:-d "%ActDir%" 2^>NUL') do ( 
21.
    set "Item=%%~xf" 
22.
    call :ConcatString Extensions 
23.
24.
 
25.
  for %%e in (%Extensions%) do ( 
26.
    set /a Cntr=1 
27.
    set "Ext=%%e" 
28.
 
29.
    for /f "delims=" %%f in ('dir /b /o:-s /a:-d "%ActDir%\*%%e" 2^>NUL') do ( 
30.
      set "File=%ActDir%\%%f" 
31.
      call :RenameFile 
32.
      set /a Cntr+=1 
33.
34.
35.
exit /b 
36.
 
37.
 
38.
 
39.
:RenameFile 
40.
  ren "%File%" "%ParentDir%-%Cntr%%Ext%" 
41.
exit /b 
42.
 
43.
 
44.
 
45.
:ConcatString 
46.
  call set "Compare1=%%%1%%" 
47.
  call set "Compare2=%%%1:%Item%=%%" 
48.
  if "%Compare1%" neq "" if "%Compare1%" neq "%Compare2%" exit /b 
49.
  call set "%1=%%%1%% %%Item%%" 
50.
exit /b
Gruß
Friemler
Bitte warten ..
Mitglied: Schnubbi8718
22.06.2011 um 15:35 Uhr
Vielen Herzlichen Dank Friemler, du bist echt ein Ass.

Ich bin ein Enduser, der sich ab und an mit komplizierteren Dingen beschäftigt, also werde ich jetzt nicht jeden Tag hier sein und das Forum durchlesen. Seid mir nicht böse deswegen, aber es ist nun mal so. Ihr seid von einem anderen Board empfohlen worden, (euer Ruf ist nicht schlecht) deswegen und durch google bin ich auf euch gekommen.

Ich hab etwas erfahrung mit Delphi (Pascal), hab früher mit BASIC ein bisschen programmiert und aktuell hab ich vor mir Java beizubringen (über einen Bekannten, der das im Studium lernt). Wenn ihr also Fragen dazu habt, kann ich gerne versuchen da etwas beizusteuern.

Nur mal so als Info, nicht dass ihr glaubt ich hab eure Dienste nur ausgenutzt oder, ich weiß nicht genau worauf TimoBeil da genau raus wollte.

Vielen Dank und auf bald
Bitte warten ..
Mitglied: Skyemugen
22.06.2011 um 15:54 Uhr
Aloha,

ah der T-Mo hat einfach gesagt, die Nase dick, dass oftmals nur Leute kommen, ein Skript wollen und wieder gehen und er eigentlich der (durchaus berechtigten) Meinung ist, man sollte hier den Usern nur helfen und nicht deren Arbeit abnehmen .. allerdings ist das immer relativ *gg* ob man gerade Lust hat, ein ganzes Skript zu entwerfen oder nicht (zumindest geht mir das so). Der T-Mo fragt also erst einmal, wie die ganze Dimension aussieht (mache ich auch oft), um dann mit dem Satellitenüberblick einzelne Vorstöße zu geben *lach*. allerdings verstehen viele (vor allem Eintages-)Enduser den T-Mo nicht und halten seine konstruktiven Beiträge für Bitte das Wort deiner Wahl einfügen ... der arme

greetz André

P.S.: Hm, gut, wir wurden von einem anderen Board empfohlen - sehr schön ^_^
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Windows Server
gelöst Freigegebener Ordner "Eigene Dateien" (8)

Frage von JensDND zum Thema Windows Server ...

Windows 10
Löschen von Ordner mit Dateien (3)

Frage von jerry32 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...