helmut007
Goto Top

Dateiname mit Pfad erweitern (mittels Batch Verarbeitung ?)

schade niemandem

Allen einen guten Abend!

privat habe ich etwa 600 GB Daten in tief verschachtelten Strukturen abgelegt.

Das Problem: Die Daten liegen auf
- mehreren Rechnern
- mehreren Speicherorten (lokale externe Festplatten, Festplatten auf verschiednenen Rechnern, Netz).
Es wird immer schwieriger, die Übersicht zu behalten.

Meine Frage:
Wie könnte ich alle Dateinamen mit ihrem Speicherort (Laufwerk, Pfad) erweitern ?

Die Idee "dahinter":

- alle Dateien dann an einem Ort zentrieren
- alle mehrfach vorhandenen Dateien löschen
- dann in eine geeignete Filestruktur überführen

Vielen Dank
Helmut

Content-Key: 172183

Url: https://administrator.de/contentid/172183

Printed on: April 19, 2024 at 03:04 o'clock

Member: mathe172
mathe172 Aug 28, 2011 at 20:45:57 (UTC)
Goto Top
Hallo,

Hier mal einen Tipp(Hab grad keine Zeit für einen vollständigen Code):
for /r "C:" %%A in (*.*) do (set "Datei=%%A" & call set "Datei=%%Datei:\=_%%" & call echo.%%Datei::=#%%)  
Das gibt dir alle Dateien mit Pfaden aus. Die Pfade sind so bearbeitet, dass sie sich als Dateinamen verwenden lassen sollten.

MfG,
Mathe172
Member: bastla
bastla Aug 28, 2011 at 21:07:24 (UTC)
Goto Top
... allerdings wäre es ratsam, anstelle der Ersatzzeichen "_" (für "\") und "#" (für ":") etwas exotischere Varianten (wie zB ASCII 186 für "\" und ASCII 246 für ":"; sollten möglichst in den Dateinamen / Pfaden überhaupt nicht vorkommen) zu verwenden - damit ließe sich der Vorgang dann auch wieder korrekt umkehren.

Außerdem könnte es vielleicht auch schon genügen, den Vorgang auf die Ordnernamen zu beschränken ...

Grüße
bastla
Mitglied: 99045
99045 Aug 28, 2011 at 21:23:39 (UTC)
Goto Top
Hi,

vielleicht fangen wir erst einmal mit der Nennung des Betriebssystems an, bevor hier irgendwelche Vorschläge gepostet werden.
Nicht uninteressant wäre auch, um wieviel Partitionen es sich insgesamt handelt und ob die gleichzeitig im Zugriff sein können.
Member: Skyemugen
Skyemugen Aug 29, 2011 at 07:30:25 (UTC)
Goto Top
Zitat von @Helmut007:
Die Idee "dahinter":

- alle Dateien dann an einem Ort zentrieren
- alle mehrfach vorhandenen Dateien löschen
- dann in eine geeignete Filestruktur überführen

Aloha,

doppelte löschen und neue Struktur anlegen ... und dafür erst alles umlagern, umbenennen, dann erst löschen, dann wieder umbenennen und in eine neu definierte Struktur (Neues Laufwerk, alte Pfade oder wie? Die geeignete Filestruktur will gleich mit durchdacht sein) auslagern?

Also ich weiß ja nicht ... wäre mir prozesstechnisch banane aber mag jeder anders face-wink

greetz André

P.S.: mehreren Speicherorten (lokale externe Festplatten, Festplatten auf verschiednenen Rechnern, Netz) aber alles gemappte Laufwerke oder auch UNC-Pfade, sind alle gleichzeitig zugreifbar oder abwechselnd => kann Laufwerk / Pfad theoretisch doppelt vorkommen?
Member: Helmut007
Helmut007 Aug 29, 2011 at 08:28:34 (UTC)
Goto Top
Guten Morgen und euch allen besten Dank !!

an Mathe172 und bastla
werde es ausprobieren

an Kaputtnick
Betriebssysem Win7
Partitionen 7, nicht alle gleichzeitig im Zugriff
wenn ich Partition um Partition die Filenamen so ergänzen könnte
Rechner-ID_Partitions-ID_Pfad_Filename

Beispiel Quelle:
Acer-1_C:\Dokumente und Einstellungen\Eigene Dateien\Bib-Orig\30_Helmut\email\Newsletter Boote.msg

Beispiel Ziel:
Acer-1_C÷║Dokumente und Einstellungen║Eigene Dateien║Bib-Orig║30-Helmut║email║Newsletter Boote.msg


an André
Ja, teile Deine Meinung
habe viel über Filestruktur nachgedacht.
Schliesslich möchte ich nur Daten redundanzfrei ablegen und vor allem wieder finden können.
Es ist eine zu tief verschachtelte Struktur entstanden.
Zu gross für eine "Wolke", daher Doppelspurigkeiten mit mangelhafter Synchronisation.
Deshalb denke ich darüber nach, alles nur noch nach Dokumententypen (Text, Biild, Bewegtbild, Ton, ...) zu gruppieren
und dann mittels Desktop Search (google?) zu arbeiten.
Sehr hilfreich wäre es, die aktuellen "Pfad-Informationen" als Stickwörter in die Metadaten der Dokumente zu übernehmen.
Mitglied: 99045
99045 Aug 29, 2011 at 10:15:03 (UTC)
Goto Top
Hi,

mein Vorschlag wäre, erst einmal eine Liste für jede Partition anzulegen, die sich dann auch nach gewünschten Kriterien (z. B. mit SORT) sortieren ließe. Dazu habe ich die Variable "Space" verwendet, um bestimmte Spalten auf eine feste Länge zu bringen.

@echo on & setlocal
set /p "LW=Laufwerksbuchstaben eingeben: "  
set LW=%LW:~0,1%:\
@echo [%LW%] 
set /p "VLabel=Partitionsbezeichnung eingeben: "  
set "space=                                                                                                                    "  
Set "Log=%temp%\%VLABEL%.txt"  
del %Log% 2>&1>NUL
set VLabel=%VLABEL%%Space%
set FLabel=%VLabel:~0,15%
For /F "delims=" %%i in ('dir %LW% /a-D /s /b') do call :Process "%%~ti" %%~zi "%%~nxi" "%%~dpi"  
goto :eof

:Process
set Fname=%~3%space%
@echo Fname=[%fname%]

set Fdate=%~1
@echo FDate=[%fDate%]

set FSize=%space%%2
@echo FSize=[%fSize%]

set Fpath=%~4
@echo FPath=[%fpath%]
 
@echo %FDate:~-15,15% ! %FSize:~-15,15% ! %FLabel% ! %FName:~0,64% ! %FPath% >> %log%
goto :eof

Nur teilweise getestet, nur als Ansatz zu verstehen.
Wenn alles so läuft, wie du dir das vorstellst, kannst du in Zeile 01 ECHO auf off setzen und unten überflüssige Echos entfernen.

Die entstandenen Logfiles kannst du dann zusammenfügen und auf Duplikate durchsuchen. Aber das wäre dann eine andere Baustelle. face-smile

Gruß

Edit:"delims=" eingefügt
Member: Helmut007
Helmut007 Aug 29, 2011 at 11:05:32 (UTC)
Goto Top
Hi Kaupttnick

Danke !
Werde testen und mich melden,

bis dahin beste Grüsse
Helmut
Member: Helmut007
Helmut007 Aug 30, 2011 at 15:07:59 (UTC)
Goto Top
Guten Tag Kaputtnick,

nun habe ich einen ersten Test durchgeführt, fühle mihc aber etwas überfordert mit den Resultaten.
Kann ich von Dir Rat erhalten?

Danke und beste Grüsse
Helmut

back-to-topMein Test + Resultat:


 

   @echo on & setlocal
   set /p "LW=Laufwerksbuchstaben eingeben: "  
   set LW=%LW:~0,1%:\
   @echo [%LW%]
   set /p "VLabel=Partitionsbezeichnung eingeben: "  
   set "space= "   
   Set "Log=%temp%\%VLABEL%.txt"   
   del %Log% 2>&1>NUL 
   set VLabel=%VLABEL%%Space% 
   set FLabel=%VLabel:~0,15% 
   For /F %%i in ('dir %LW% /a-D /s /b') do call :Process "%%~ti" %%~zi    "%%~nxi" "%%~%dpi"   
   goto :eof 
   :Process 
   set Fname=%~3%space% 
   @echo Fname=[%fname%] 
   set Fdate=%~1 
   @echo FDate=[%fDate%] 
   set FSize=%space%%2 
   @echo FSize=[%fSize%] 
   set Fpath=%~4 
   @echo FPath=[%fpath%] 
   @echo %FDate:~-15,15% ! %FSize:~-15,15% ! %FLabel% ! %FName:~0,64% !    %FPath% >> %log% 
   goto :eof
   



back-to-topDer Programmstart:


C:\Dokumente und Einstellungen\ott100\Desktop>set /p "LW=Laufwerksbuchstaben eingeben: "
Laufwerksbuchstaben eingeben: c

C:\Dokumente und Einstellungen\ott100\Desktop>set LW=c:\
[c:\]

C:\Dokumente und Einstellungen\ott100\Desktop>set /p "VLabel=Partitionsbezeichnu
ng eingeben: "
Partitionsbezeichnung eingeben: C:\

back-to-topBeginn der Verarbeitung:


C:\Dokumente und Einstellungen\ott100\Desktop>set "space= "á

C:\Dokumente und Einstellungen\ott100\Desktop>Set "Log=C:\DOKUME~1\ott100\LOKALE
~1\Temp\C:\.txt"á

C:\Dokumente und Einstellungen\ott100\Desktop>del C:\DOKUME~1\ott100\LOKALE~1\Te
mp\C:\.txt 2>&1 1>NULá
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.

C:\Dokumente und Einstellungen\ott100\Desktop>set VLabel=C:\ á

C:\Dokumente und Einstellungen\ott100\Desktop>set FLabel=C:\ áá

C:\Dokumente und Einstellungen\ott100\Desktop>For /F %i in ('dir c:\ /a-D /s /b'
) do call :Process "%~ti" %~zi "%~nxi" "%~dpi"á


back-to-topund dann: ...loopt es plötzlich und bringt endlos:


C:\Dokumente und Einstellungen\ott100\Desktop>call :Process "" "Dokumente" "c:\

Das Sprungziel - Process wurde nicht gefunden.
Mitglied: 99045
99045 Aug 30, 2011 at 15:20:39 (UTC)
Goto Top
Hi,

den wichtigsten Fehler solltest du erst einmal beseitigen:

In meinem Script in Zeile 07 ist die Variable "Space" nach ca. 128 Stellen mit einem Anführungszeichen abgeschlossen, das fehlt bei dir.
Also bitte nochmal entsprechend probieren.

Scripte bitte mit Codeformatierung posten (Formatierungshilfe), indem du sie in entsprechende Tags setzt
< code> ... < /code> (Leerzeichen hinter dem Linkspfeil aber entfernen. Bitte in deinem Beitrag noch ändern, das liest sich einfacher.

Warum kopierst du die Vorlage nicht einfach und übernimmst sie? Das geht doch im Kopf des Kommentars oben rechts mit Quelltext

Noch ein Hinweis: Bevor du in der Konsole nach der Eingabe irgendwas siehst, kann es eine ganze Weile dauern, je nach Anzahl der Verzeichnisse und Dateien viele Minuten. Das kommt durch den /b /s - Parameter im Dir-Befehl, der sammelt erst einmal Informationen, ehe er richtig loslegt. face-smile
Member: pieh-ejdsch
pieh-ejdsch Aug 30, 2011 at 15:29:50 (UTC)
Goto Top
moin Helmut,

der Space ist nicht ausschlaggebend!
in Zeile 11: liegt der Fehler
For /F %%i in ('dir %LW% /a-D /s /b') do call :Process "%%~ti" %%~zi "%%~nxi" "%%~dpi"  

ein Prozentzeichen ist Zuviel "%%~%dpi"

Gruß Phil
Member: bastla
bastla Aug 30, 2011 at 18:42:08 (UTC)
Goto Top
... und mit einem zusätzlichen "delims=" sollte die Zeile dann auch wirklich verwendbar werden ...

Grüße
bastla
Mitglied: 99045
99045 Aug 30, 2011 at 19:25:55 (UTC)
Goto Top
Recht hast du, hab's eingefügt.

Gruß
Member: Skyemugen
Skyemugen Aug 30, 2011 at 19:40:59 (UTC)
Goto Top
... aber Zeile 11 fehlerhaft gelassen (siehe Phils Hinweis) ...

greetz André
Mitglied: 99045
99045 Aug 30, 2011 at 20:06:03 (UTC)
Goto Top
Danke für den Hinweis, aber ich hatte das geändert. Nur leider passiert nach einer Anderung folgendes, wenn man danach nochmal ändert: Beim Aufruf des Kommentars ist die Änderung erst mal wieder weg,
WENN man nicht unmittelbar nach dem Aufruf STRG-F5 betätigt, und das hatte ich vor dem Edit vergessen und nicht mehr kontrolliert.
Member: Skyemugen
Skyemugen Aug 30, 2011 at 20:25:42 (UTC)
Goto Top
[OT]... kann ich nicht nachvollziehen, ich bearbeite meine Kommentare teilweise 5-6 mal direkt nacheinander ohne Probleme (sprich: Änderung, fertig, ach Mist, Änderung², fertig, ne da muss noch, Änderung³ und das alles innerhalb weniger Sekunden)[/OT]
Mitglied: 99045
99045 Aug 30, 2011 at 20:31:08 (UTC)
Goto Top
[OT]
Das Problem habe ich immer, wenn ich über einen T-COM-Proxy surfe, auch die neuesten Beiträge muss ich mir immer per STRG-F5 bzw. STRG-Reload holen. Daran kann man sich gewöhnen, nur vergesse ich es manchmal. face-smile Es passiert aber ausschließlich in diesem Forum.
[/OT]
Member: Helmut007
Helmut007 Sep 01, 2011 at 15:27:23 (UTC)
Goto Top
Hi Kaupttnick ,
Hi Phil,

besten Dank für die vielen Tipps !!
Ist fast ein wenig wie eine Fremdsprache für mich, auf eine Art sehr spannend.
Werde das nun so probieren und bin sehr neugierig, wie es dann läuft und mich wieder melden.

Bis dahin beine besten Wünsche an Euch !!
Helmut
Member: Helmut007
Helmut007 Sep 01, 2011 at 16:31:30 (UTC)
Goto Top
Allen einen guten Abend noch einmal,

nun habe ich mittels Quelltext getestet.
Es kommt wieder zu einer Endlosschlaufe,

vielleicht gebe ich falsche Parameter mit?

back-to-topEingabeaufforderung:

Laufwerksbuchstaben eingeben: c

back-to-topPartitionsbezeichnung eingeben:

"Partitionsbezeichnung eingeben: Temp
hier weiss ich eigentlich nicht was ich eingeben soll
ich dachte den ersten Teil eines Pfades (c:\Temp) ?

Danke von Helmut
Mitglied: 99045
99045 Sep 01, 2011 at 16:37:28 (UTC)
Goto Top
Hi,

bei der Partitionsbezeichnung kannst du eingeben, was du möchtest, allerdings ohne Leerzeichen . Die ist nur zur Unterscheidung für dich gedacht, damit du hinterher weißt, von welcher Platte du die Logdatei erstellt hast.

Hast du meine ursprüngliche berichtigte Version als Quelltext übernommen?

Ist die von dir als Endlosschleife aufgefasste Anzeige vielleicht die Ausgabe der Aufbereitung der einzelnen Zeilen? Du kannst das mit der PAUSE-Taste ja mal anhalten und kontrollieren.

Gruß
Member: pieh-ejdsch
pieh-ejdsch Sep 01, 2011 at 19:33:52 (UTC)
Goto Top
moin,

und als weitere Hinweise noch!
  • in der FOR wird erst der Dir Verabreitet und danach beginnt die Forschleife mit der eigentlichen Arbeit.
  • wenn die Verarbeitung des DIR in der Forschleife absout nicht beginnt (oder nach längerer Zeit NICHT beginnen will), ist es Ratsam die Ausgabe des Dir in eine Datei zu leiten. und diese dann in der FOR zu verarbeiten.
  • wenn die For mit Rekursion gestartet wird geschieht die Verarbeitung der Verzeichnisstruktur sofort.
  • manche!! Ordner- oder DateiNamen werden in der "FOR mir DIR" bei enthaltenen SonderZeichen wie ' nicht zu Dateiattributen erweitert (wurde besonders bei mp3 beobachtet)
Wenn es unbedingt eine Übersichtliche Liste werden muss, welche auch zur weiteren Verarbeitung genutzt wird.
  • Die LeerZeichen nach den Dateinamen zum Überblick in der Liste sollten gegen TAB ausgetauscht werden. Es besteht sonst keine leichte Möglichkeit die Leerzeichen eines DateiNamen von den Nachfolgenden LeerZeichen bei einer Weiterverarbeitung dieser Liste zu unterscheiden.
  • Für die ungeduld gibt es dann noch einen ZeilenZähler

hier ist einer Drin Für jede 250. Zeile die Angezeigt wird. Die Tabs werden auch anstatt der Leerzeichen erstellt.
eine Spalte für die originalPfadnamen ist zum schluss auch an die umgeschriebenen Pfadnamen noch angefügt.
@echo off & setlocal
set /p "LW=Laufwerksbuchstaben eingeben: "  
set "LW=%LW:~0,1%:\%LW:~3%"  
if not Exist "%lw%" @echo "%LW%" nicht Vorhanden &goto :eof  
set /p "VLabel=Partitionsbezeichnung eingeben: "  
if not defined Vlabel set "Vlabel=Volumexx%random%"  
Set "Log=%temp%\%VLABEL%.txt"  
type nul>"%Log%"  
set "FLabel=%VLABEL:~0,16%"  
if "%FLabel:~7,1%" == "" set "FLabel=%FLabel%	"  
if "%FLabel:~15,1%" == "" set "FLabel=%FLabel%	"  
:: 
:: eine Dateiliste kann hier eingestellt werden
:: Beispiel: set FileList="*.doc" "*.txt" "*.mp3" "*.wav" "*.bmp" "*.avi" "*.jpg" "*.mpg" "*.iso"   

set "Filelist=*"  

set /a Nr=0
echo Erzeuge Dateiliste %time%
set /a ND = 250
echo Zeige jede %ND%. Bearbeitung

(
For /r "%LW%" %%i in (%FileList%) do (echo %%~ti^|%%~zi^|%FLabel%^|%%~nxi^|%%~dpi  
	set /a Nr+=1,x=Nr%%ND,x=1/x 2>nul >&2 || for /f %%h in ('"set /a x=Nr"') do >&3 (cls & echo\Bearbeite %%h ...)  
)
)>"%log%"   


echo Erzeuge PfadUmnennung und Liste %time%
set /a ND = 250
echo Zeige jede %ND%. Bearbeitung
(
For /f "usebackq tokens=1-5 delims=|" %%i in ("%log%") do (set "Name=|%%l"  
	set "FSize=|%%j"  
	set "FPath=|%%m"  
	setlocal enabledelayedexpansion
	set "FName=!Name:~0,160!"  
	for /l %%j in (7,8,159) do for /f "delims=	" %%k in (" !fName:~%%j,1!") do if "%%k" == " " set "fName=!fName!	"  
	for /l %%j in (7,8,15) do for /f "delims=	" %%k in (" !FSize:~%%j,1!") do if "%%k" == " " set "FSize=!FSize!	"  
	for /l %%j in (7,8,247) do for  /f "delims=	" %%k in (" !FPath:~%%j,1!") do if "%%k" == " " set "FPath=!FPath!	"  
	set "FPath=!FPath::=¦!"&rem 186  
	set "FPath=!FPath:\=÷!"&rem 246  
	for /f "tokens=* Delims=" %%j in ("%%i	!FSize!|!FLabel!!fName!!FPath!|%%m") do (endlocal  
		>&3 echo %%j
		set /a Nr-=1,x=Nr%%ND,x=1/x 2>nul >&2 || for /f %%h in ('"set /a x=Nr"') do cls & echo\Nur noch %%h ...  
)	) 
) 3>"%temp%\%VLABEL%2see.txt"  

"%temp%\%VLABEL%2see.txt"  

Gruß Phil
Member: Biber
Biber Sep 19, 2011 at 11:25:30 (UTC)
Goto Top
Moin Helmut007,


ohne dein Feedback nützt dieser Beitrag niemandem hier im Forum.

Falls noch etwas kommt, lösche ich gern diesen Kommentar und verschiebe den Beitrag retour, aber erstmal

back-to-top### Papierkorb ###

Member: Helmut007
Helmut007 Oct 12, 2011 at 11:18:44 (UTC)
Goto Top
Hi Phil

SORRY das ich so spät reagiere. Bin etwas überfordert (Hölle in beruflicher Hinsicht).

Ein grosses DANKE für diese super Hilfe!
Es funktioniert perfekt und erstellt mir die vorgesehene Liste.

Für mich ist es eine sehr gute Lösung.

Ich habe vor die Dateien so weiter zu verarbeiten:
- Ich übernehme diese in eine Tabelle, um die Strukturen zu bereinigen.
- Dateien mittels tool wie "lupasrename" umbenennen
- eventuell Infos in die Dateiattribute übernehmen (tool attribut change)
- dann alles in ein Archiv auf NAS verlagern
- jetzt die "doppelten" (bezüglich Inhalt) entfernen
- und damit wäre das Ziel erreicht.

Beste Grüsse
Helmut
Member: Helmut007
Helmut007 Oct 12, 2011 at 11:20:40 (UTC)
Goto Top
Hi Biber

SORRY das ich so spät reagiere. Bin etwas überfordert (Hölle in beruflicher Hinsicht).
Habe Phil soeben gedankt für die super Lösung.

Beste Grüsse
Helmut
Member: Biber
Biber Oct 12, 2011 at 19:21:31 (UTC)
Goto Top
Moin Helmut007,

danke für dein Feedback und schön, dass das Forum dein Problemchen lösen konnte.

Ich habe den Beitrag wieder -mit dem ursprunglichen Titel - zurückverschoben nach "Bätsch & Schell".

Die letzten drei Kommentare (beginnend mit meinem vom 19.9.2011) lösche ich bei Gelegenheit.

Schönen Abend
Biber
P.S.
....Hölle in beruflicher Hinsicht
Hmmm. ... wenn du doch auch hier arbeitest, dann könnten wir ja morgen mittag gemeinsam zur Kantine gehen....
Member: Helmut007
Helmut007 Oct 13, 2011 at 20:40:51 (UTC)
Goto Top
Hi Biber,
Da mache ich gerne mit! Wo arbeitest Du denn? Ich arbeite bei Manor, Hauptsitz in Basel. Kantine "Manora" im 5. Stock Warenhaus MANOR an der Greifengasse in Kleinbasel.
Freundlichen Gruss aus Basel
Helmut