bodyparts
Goto Top

Ordner umbenennen per Script

Hallo,

ich habe ca. 300 Ordner auf einer Partition X liegen. Diese Ordner liegen im Verzeichniss x:\Daten.
Die Ordner sind alle etwas umständlich benannt, um diese zu sortieren möchte ich gerne aus einer Txt Datei die in diesen 300 Ordnern liegt die Zeile in den Ordnernamen einbinden.
Irgendwie müssten das Umbennen fortgesetzt werden können wenn weitere Ordner dazu kommen.

evtl ne Idee, ich weiß wohl die Schritte aber wie man diese umsetzt nicht....

Gruß
Kommentar vom Moderator Biber am 02.10.2009 um 12:11:42 Uhr
Verschoben von "Tools & Utilities" nach "Batch & Sowat".

Vermutlich ist dieser Beitrag die Mutter aller umbennen-running gag counter-Fortschreibungen.
Bei rgc=#621 hab ich aufgegeben... face-wink

Content-Key: 125368

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

Ausgedruckt am: 29.03.2024 um 13:03 Uhr

Mitglied: bastla
bastla 20.09.2009 um 19:41:47 Uhr
Goto Top
Hallo bodyparts!

Ich fürchte, mit so detaillierten Angaben wie
... aus einer Txt Datei die in diesen 300 Ordnern liegt die Zeile in den Ordnernamen einbinden
könntest Du uns überfordert haben ...

aus einer zufällig ausgewählten Txt Datei die in diesen 300 Ordnern liegt irgendeine Zeile an beliebiger Position in den Ordnernamen einbinden ...
sollte aber zu machen sein, etwa unter Verwendung von Bausteinen wie "for /d", "set /p<TxtDatei" oder "for /f" und "findstr /n", etc

Grüße
bastla
Mitglied: Biber
Biber 20.09.2009 um 20:04:01 Uhr
Goto Top
Moin bodyparts,
Zitat von @bodyparts:
Die Ordner sind alle etwas umständlich benannt,
Irgendwie bin ich jetzt nicht wirklich überrascht davon...
Irgendwie müssten das Umbennen fortgesetzt werden können
Auch davon nicht...*seufz*...---> rgc=#616
ich weiß wohl die Schritte aber wie man diese umsetzt nicht....
Das Originalzitat ist wohl eher "Die Worte hör' ich schon, allein mir fehlt der Glaube".

Bitte, bodyparts, wenn Du doch die Schritte weisst, plaudere sie doch mal aus, menno.
Wir haben in diesem Seitenarm des Forums ein Art Kronzeugenregelung - Dir wird nichts passieren.

Verspricht
Biber
Mitglied: bodyparts
bodyparts 02.10.2009 um 08:27:56 Uhr
Goto Top
moin...

ich möchte mal kurz den Stand klären...

also die Ordner liegen alle auf der Partition X in einem Hauptordner. Jeder dieser Ordner hat eine txt Datei aus der ich die erste Zeile auslesen möchte und den Ordner in dem diese liegt mit der Zeile am Anfang unbenennen möchte.

Wie man das händisch macht weiß ich, aber nicht wie ich das in ein Script binden kann.

Die TXT Datei sieht so aus Daten_info.txt, die erste Zeile kann bzw hat ein Leerzeichen also:

NAME C

usw

lg
Mitglied: bastla
bastla 02.10.2009 um 12:01:29 Uhr
Goto Top
Hallo bodyparts!

Hatte eigentlich schon gar nicht mehr mit Dir gerechnet ...

Versuch es so:
@echo off & setlocal
::Ordner immer mit abschließendem \ angeben
set "Ordner=X:\Daten\"  
set "Datei=Daten_info.txt"  

for /d %%i in ("%Ordner%*.*") do call :ProcessDir "%%i"  
pause
goto :eof

:ProcessDir
set p Name=<"%~1\%Datei%"  
for /f "tokens=1*" %%a in ("%Name%") do echo ren %1 "%%b"  
goto :eof
Solange in der Zeile 12 das "echo" steht, wird der Befehl für das Umbenennen nur angezeigt, aber noch nicht ausgeführt.

Grüße
bastla
Mitglied: bodyparts
bodyparts 03.10.2009 um 11:21:36 Uhr
Goto Top
guten Morgen Bastla....

ich musste diese Arbeit etwas verschieben.

Ich sehe grade, das nicht alle Ordner wohl diese TXT Datei besitzen. Okay das müssen die User ändern.

Wenn im ersten Ordner keine Txt ist, dann wird gemeldet, system kann die Datei nicht finden. Im fünften Testordner war sie da.

Zweiter Test Nur ein Ordner mit der TXT Datei meldet.... drücke taste.... keine Anzeige bzw auch keine Änderung wenn ich das echo mal wegnehme...

kann man auch später noch abfangen wenn ordner schon geändert worden wird, das evtl neue dazu kommen..?

Gruß
Mitglied: bastla
bastla 03.10.2009 um 19:53:48 Uhr
Goto Top
Hallo bodyparts!
Ich sehe grade, das nicht alle Ordner wohl diese TXT Datei besitzen.
Um diesen Fall zu berücksichtigen, kannst Du folgende Zeile 11 einfügen:
if not exist "%~1\%Datei%" goto :eof
Soferne die Datei "Daten_info.txt" nicht aus anderen Gründen (mit dem gleichen Namen) erhalten bleiben muss, könntest Du zusätzlich die bisherige Zeile 12 ändern auf
for /f "tokens=1*" %%a in ("%Name%") do echo ren %1 "%%b" && echo ren  "%~1\%Datei%" "Datei_Info_erledigt.txt"
(das zweite "echo" soll wiederum ein gefahrloses Testen erlauben) und damit die "Daten_Info.txt" umbenennen um zu kennzeichnen, dass der Ordner bereits umbenannt wurde.

Im Übrigen macht es aber auch nix, wenn ein Ordner auf den selben Namen "umbenannt" wird - daher kann der Batch für längere Zeit eingesetzt werden, um auch später hinzukommende Ordner noch zu erfassen.

Grüße
bastla
Mitglied: bodyparts
bodyparts 04.10.2009 um 11:43:08 Uhr
Goto Top
guten Morgen Bastla,

Änderungen habe ich geprüft, aber es passiert nichts.... in den Ordner x:\Daten sind ja ca. 350 Ordner die alle unterschiedlich benannt sind und in jedem dieser Ordner ist die txt Datei und weitere Daten.

Grüße

bp
Mitglied: bastla
bastla 04.10.2009 um 12:36:17 Uhr
Goto Top
Hallo bodyparts!

Da ich mir nun gar nicht vorstellen kann, woran das liegt, noch ein Versuch: Füge die folgende Zeile unmittelbar nach der Zeile ":ProcessDir" ein:
echo %1 & dir /s /b "%~1\%Datei%"
Jetzt sollten zumindest alle Ordner bzw, wenn enthalten, auch die jeweilige "Daten_info.txt" (auch, wenn diese in einem Unterordner liegen sollte) oder eine diesbezügliche Fehlermeldung angezeigt werden - wenn nix zu sehen ist, stimmt die Ordnerangabe in Zeile 3 nicht.

Grüße
bastla
Mitglied: bodyparts
bodyparts 04.10.2009 um 15:09:16 Uhr
Goto Top
Hallo Bastla...

wenn die "pause" drin ist, zeigt er mir den Ordner an und die txt Datei incl Pfad. Drücke ich dann weiter ist sofort schluss..... kann man zur Überprfüfung sich die erste Zeile der Txt Datei anzeigen lassen, in die der Ordner ja umbenannt / ergänzt werden soll.

Gruß
Mitglied: bastla
bastla 04.10.2009 um 15:22:20 Uhr
Goto Top
Hallo bodyparts!

Du kannst nach der Zeile
set p Name=<"%~1\%Datei%"
ein
echo %Name%
einfügen oder alternativ auch schon davor
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%~1\%Datei%"^|findstr /b "1:"') do echo %%b  
verwenden.

Grüße
bastla
Mitglied: bodyparts
bodyparts 04.10.2009 um 16:17:43 Uhr
Goto Top
okay...

soll ich die "tokens" Zeile gegen die neue ersetzen?

also die Zeile aus der txt Datei wird angezeigt, aber der Ordner wird nicht umbenannt....

also Pfad ist richtig, Datei und Dateiinhalt bzw die erste Zeile wird ausgelesen.

Habe die Token Zeile auch mal ausgetauscht, keine Änderung

kl edit

die erste Zeile wird als Befehl erkannt, somit die Meldung der Befehl kann nicht ausgeführt werden....
Mitglied: bastla
bastla 04.10.2009 um 16:36:19 Uhr
Goto Top
Hallo bodyparts!
... aber der Ordner wird nicht umbenannt....
Solange vor dem "ren" ein "echo" steht, wird auch nur der Befehl zum Umbenennen angezeigt (das sollte aber eigentlich funktionieren) ...

Poste bitte einmal den derzeitigen Stand des Batches.

Und: Enthält die erste Zeile der Textdatei Anführungszeichen, bzw was folgt genau auf "Name"?

Grüße
bastla
Mitglied: bodyparts
bodyparts 04.10.2009 um 17:25:03 Uhr
Goto Top
das mit dem echo ist mir schon klar....

hier der Stand, ich habe eine Testumgebung erstell, somit kanns nichts passieren..... leider tut es das ja auch .... ;>)

**********************************************************************************************
@echo off & setlocal 

set "Ordner=X:\Daten\"   
set "Datei=Daten_info.txt"   

for /d %%i in ("%Ordner%*.*") do call :ProcessDir "%%i"   
pause
goto :eof 

:ProcessDir 
echo %1 & dir /s /b "%~1\%Datei%"  
if not exist "%~1\%Datei%" goto :eof  
set p Name=<"%~1\%Datei%"   
echo %Name%

for /f "tokens=1*" %%a in ("%Name%") do ren %1 "%%b" && ren  "%~1\%Datei%" "Datei_Info_erledigt.txt"  
rem for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%~1\%Datei%"^|findstr /b "1:"') do %%b  
goto :eof
********************************************************************************************
die vorletzte Zeile ist mir nicht ganz klar bzw an welche Stelle so sie?

Gruß bp


[Edit Biber] Code in gleichnamige Tags gesetzt. [/Edit]
Mitglied: bastla
bastla 04.10.2009 um 21:22:56 Uhr
Goto Top
Hallo bodyparts!

Die Zeilen 12, 15 und 18 (die vor der Zeile 13 sinnvoller wäre und in der das "echo" nach dem "do" fehlt - hier soll ja tatsächlich die erste Zeile nur angezeigt werden) sind für die Fehlersuche gedacht und sollten entsprechende Ausgaben produzieren, an denen Du Dich dann orientieren kannst - wenn Du dann noch aus dem "echo off" in Zeile 2 ein "echo on" machst, kannst Du ganz genau sehen, welche Befehle wie ausgeführt werden.

Abgesehen davon, dass meine letzte Frage oben noch nicht beantwortet ist, kann ich, solange Du nicht die entstandenen Ausgaben postest, nicht mehr tun, als deren Interpretation Dir zu überlassen ...

Grüße
bastla
Mitglied: bastla
bastla 04.10.2009 um 21:51:04 Uhr
Goto Top
... konnte doch noch etwas tun, nämlich den schon ewig fehlenden "/" vor dem "p" nachtragen - so sollte es aber nun wirklich was werden:
@echo off & setlocal

set "Ordner=X:\Daten\"  
set "Datei=Daten_info.txt"  

for /d %%i in ("%Ordner%*.*") do call :ProcessDir "%%i"  
goto :eof

:ProcessDir
if not exist "%~1\%Datei%" goto :eof  
set /p Name=<"%~1\%Datei%"  
for /f "tokens=1*" %%a in ("%Name%") do ren %1 "%%~b" && ren  "%~1\%Datei%" "Datei_Info_erledigt.txt"  
goto :eof
Sorry, dass mir das erst jetzt aufgefallen ist ... face-sad

Grüße
bastla
Mitglied: bodyparts
bodyparts 05.10.2009 um 15:38:59 Uhr
Goto Top
Hallo bastla....

sieht schon viel besser aus... aber, diese aber....

der Ordner wird komplett umbenannt, nicht "ersätzt.... die TXT Zeile sollte ja den Ordner umbennen, aber nicht komplett sondern ergänzen am Anfang.

Also wenn die Zeile "abcd 1" heißt und der Ordner z.b. "qwertz" dann sollte "abcd 1 qwertz" umbenannt werden.... wäre das machbar? Evtl ein Trennstrich, aber nur evtl....

Gruß
Mitglied: bastla
bastla 05.10.2009 um 15:48:01 Uhr
Goto Top
Hallo bodyparts!
wäre das machbar?
Wenn's denn damit feststeht, was tatsächlich geschehen soll ...

Ändere Zeile 12 auf
<code type "plain">for /f "tokens=1*" %%a in ("%Name%") do ren %1 "%%~b %~nx1" && ren "%~dp1%%~b %~nx1\%Datei%" "Datei_Info_erledigt.txt"

Grüße
bastla
Mitglied: bodyparts
bodyparts 05.10.2009 um 16:27:44 Uhr
Goto Top
Hallo bastla,

dachte ich hätte das gesagt...

der Ordner wird umbenannt, aber nur der letzte Buchstabe der Zeile wird "eingefügt"...

also aus "File5 C" ( erste Zeile) wird "Ordnername C" und nicht "Ordnername File C"


Gruß bp
Mitglied: bastla
bastla 05.10.2009 um 19:10:23 Uhr
Goto Top
Hallo bodyparts!

Abgesehen davon, dass
aus "File5 C" ( erste Zeile) wird "Ordnername C" und nicht "Ordnername File C"
wenn überhaupt nur heißen könnte:
aus "File5 C" ( erste Zeile) wird "C Ordnername" und nicht "File5 C Ordnername"
fehlt mir immer noch die Information, was denn nun die erste Zeile genau enthält ...

Bisher war ich davon ausgegangen, dass diese mit dem Wort "NAME" beginnt und dahinter erst der gewünschte Name angeführt ist - deshalb wird auch alles vor dem ersten Leerzeichen weg gelassen. Wenn nun tatsächlich die gesamte erste Zeile vor dem bisherigen Ordnernamen eingefügt werden soll, dann eben als Zeile 12:
ren %1 "%Name% %~nx1" && ren  "%~dp1%Name% %~nx1\%Datei%" "Datei_Info_erledigt.txt"
Grüße
bastla
Mitglied: bodyparts
bodyparts 05.10.2009 um 19:31:24 Uhr
Goto Top
sorry, war mir nicht klar, dass du es so verstanden hast.

Also die erste Zeile kann einen Namen enthalten...

THOMAS A oder Martin Z oder auch Sonja R, also immer die komplette Zeile auslesen und umbennen...

aber erstmal vielen Dank für die Mühe...

gruß bp