jiggyjones
Goto Top

Anhand einer TXT Datei Files in ordner automatisch nummerieren

Hallo,

ich möchte wissen ob es möglich ist mit einem Batch meine millionen unterordner zu sortieren...sprich der batch sollte anhand einer TXT datei die die reihenfolge angibt die files so sortieren das sie automatisch nummeriert werden(die nummerierung ist nicht an erster stelle)

fallbeispiel :

3_02sfx122_AS_selements_c.wav
3_03bse122_AS_selements_c.wav
3_04syn122_AS_selements_c.wav

jetzt soll der batch den immer dreistelligen kürzel von zeile 5 bis 7 also sfx, bse,syn auslesen und anhand einer txt datei (wo ich die richtige reihenfolge angebe) richtig nummerieren

ich würde die txt datei selber erstellen und alle kürzel dort reinschreiben die vorkommen (sagt mir wie ob mit ; oder untereinander)

also würde in der txt datei dann stehen :

Reihenfolge:
BSE
SYN
SFX
uvm....

dann sollte das passieren:
3_01bse122_AS_selements_c.wav
3_02syn122_AS_selements_c.wav
3_03sfx122_AS_selements_c.wav

relevant für den batch wären also nur die einträge der datei:
04sfx
02syn
01bse

alles andere sollte nicht angefasst werden...hoffe ich konnte mich verständlich ausdrücken face-smile

vielen dank ;)

Content-ID: 163906

Url: https://administrator.de/forum/anhand-einer-txt-datei-files-in-ordner-automatisch-nummerieren-163906.html

Ausgedruckt am: 23.12.2024 um 04:12 Uhr

Skyemugen
Skyemugen 04.04.2011 um 14:08:35 Uhr
Goto Top
Zitat von @jiggyjones:
ich möchte wissen ob es möglich ist mit einem Batch meine millionen unterordner zu sortieren...sprich der batch sollte
anhand einer TXT datei die die reihenfolge angibt die files so sortieren das sie automatisch nummeriert werden(die nummerierung
ist nicht an erster stelle)

Aloha,

ja, es ist möglich. Frage geklärt oder wolltest du etwa ein Skript dafür? Steht nirgends *stenker* ...

greetz André

P.S.: Ich sehe Illusionen und Nebelschwaden, zu 100% ist mir nicht klar, was nun welche Reihenfolge bekommen soll ... (dein relevant verwirrt mich ...)
jiggyjones
jiggyjones 04.04.2011 um 14:10:52 Uhr
Goto Top
Ja ich bräuchte ein Skript dafür...

die reihenfolge würde ich dann in der txt datei festlegen..es sind ziemlich viele einträge..müsste das halt die txt dann erstellen
Skyemugen
Skyemugen 04.04.2011 um 14:29:32 Uhr
Goto Top
Aloha,

also Ablaufprinzip dann:

- lese Dateinamen und suche Kürzel sowie Nummerierung (für's spätere rename)
- finde gesuchten Kürzel in Textdatei
- lese Nummerierung des Kürzels aus der Textdatei/Zeile
- rename Datei > ersetze alte Nummerierung durch neue

korrekt?

greetz André
jiggyjones
jiggyjones 04.04.2011 um 14:38:18 Uhr
Goto Top
Also er soll die Nummerierung nicht aus der text datei entnehmen weil ja in jedem ordner verschiedene anzahlen von files sind...

gehen wir davon aus das wir im ordner A 10 files haben

bei diesen files soll der kürzel in der textdatei gefunden werden (in der text datei sind bestimmt 50 kürzel später)

und dann soll er anhand der reihenfolge der textdatei eine neue reihenfolge erstellen und diese dann nummerieren

sprich in der text datei sind:

1.BDE
2.BSE
3.SDE
4.SYN
5.SFX

und im folder wo die files sind sind nun :

BDE SDE UND SFX files

dann soll er BDE als erstes...SDE als zweites und SFX als letztes renamen/nummerieren...

der batch soll sich nicht die zahl aus der txt nehmen sondern nur anhand der reihenfolge die in der txt datei gegeben ist eine reihenfolge erstellen...

hoffe ich konnte es verständlich machen...
Skyemugen
Skyemugen 04.04.2011 um 14:52:17 Uhr
Goto Top
Aloha,

würde die Kürzelliste zufällig alphabetisch geordnet sein oder doch durcheinander?

greetz André
jiggyjones
jiggyjones 04.04.2011 um 15:08:52 Uhr
Goto Top
durcheinander...die aufstellung der liste hat ein bestimmtes system...sie sind also nicht alphabetisch geordnet...
pieh-ejdsch
pieh-ejdsch 04.04.2011 um 16:11:22 Uhr
Goto Top
moin,

dazu müssten aber die Datei in einen Temporären Ordner Verschoben werden - oder erstmal alle auf Dreistellig - dann auf zweistellig umbenannt werden sonst kannst Du zB. die Datei
3_03bse122_AS_selements_c.wav
nicht in
3_02bse122_AS_selements_c.wav wenn es schon vor dem Umbenennen diesen Dateinamen gibt.

@echo off
for /f "usebackq" %%i in ("Kuerzel.txt") do (set "a=1000"  
  for %%j in ("?_??%%i*.wav") do (set /a a +=1  
    set "File=%%~j"  
    setlocal enabledelayedexpansion
    set "File2=!File:0,2!!a:~-3!!File:~4!"  
    ren "!File!" "!File2!"  
    endlocal
) )

for %%i in ("?_?????????_*.wav")  do (set "File=%%~i"  
  setlocal enabledelayedexpansion
  ren "!File!" "!File:~0,2!!File:~3!"  
  endlocal
)

Gruß Phil
Skyemugen
Skyemugen 04.04.2011 um 16:23:16 Uhr
Goto Top
Aloha Phil,

vorsicht! Angenommen er ist im Ordner 10 sprich: 10_02bse122_AS_selements_c.wav, dann wird's aber nix mit ~0,2 ...

habe bisher den ren-Part im Großen und Ganzen funktionsfähig, nur das mit dem Zähler müsste ich noch anpassen *g*

Mein Ansatz, um den Namen aufzuschlüsseln und neuzusetzen sieht bisher so aus:
@echo off & setlocal enabledelayedexpansion
pushd E:\Test
for /f "delims=" %%i in ('dir /b /a-d "*.wav"') do call :Ablauf %%i  
popd
pause

:Ablauf
for /f "tokens=1-5* delims=_" %%a in ("%1") do (  
set "fol=%%a"  
set "mid=%%b"  
set "end=_%%c_%%d_%%e"  
)
set "num=%mid:~0,2%"  
set "kurz=%mid:~2,3%"  

REM hier muss ich noch etwas des Zählers ( %Zahl% )wegen tun
REM (darum flog die %Liste% erstmal raus, habe erst die Zeilennummer genutzt
REM (es ist Montag ... da gibt es bei mir nur eine Datei von einem Dateitypen *lalala*)

echo ren %1 %fol%_!Zahl!%kurz%%end%
goto :eof

Aber vielleicht denke ich auch mal wieder viel zu kompliziert *gg*

greetz André
jiggyjones
jiggyjones 04.04.2011 um 16:31:58 Uhr
Goto Top
vielen dank für die schnelle hilfe..aber die files in temporäre ordner verschieden wäre katastrophal..können wir das nicht anders handeln ? :D

gruß jiggy
Skyemugen
Skyemugen 04.04.2011 um 16:36:37 Uhr
Goto Top
Wenn du ausschließen kannst, dass eventuelle neue Dateinamen sich mit alten überschneiden könnten, wäre das nicht notwendig ...

P.S.:
Zitat von @pieh-ejdsch:
dazu müssten aber die Datei in einen Temporären Ordner Verschoben werden - oder erstmal alle auf Dreistellig - dann auf
zweistellig umbenannt werden sonst
jiggyjones
jiggyjones 04.04.2011 um 16:41:45 Uhr
Goto Top
Also es wird aufjedenfall gleiche files geben sprich:

3_01bse122_AS_selements_c.wav
3_02syn122_AS_selements_c.wav
3_03sfx122_AS_selements_c.wav
3_05bse122_AS_selements_c.wav
3_07syn122_AS_selements_c.wav

und die müssten dann hintereinander renamed werden also:


3_01bse122_AS_selements_c.wav
3_02bse122_AS_selements_c.wav
3_03syn122_AS_selements_c.wav
3_04syn122_AS_selements_c.wav
3_05sfx122_AS_selements_c.wav
pieh-ejdsch
pieh-ejdsch 04.04.2011 um 17:14:11 Uhr
Goto Top
hi sky,

vorsicht! Angenommen er ist im Ordner 10 sprich: 10_02bse122_AS_selements_c.wav, dann wird's aber nix mit ~0,2 ...
braucht NICHT zu sein da ja : for %%j in ("?_??%%i*.wav") do ...
mit dem Platzhalter FrageZeichen oben schon definiert worden ist.

es wird NICHTS Verschoben nur in Zwei schritten umbenannt
eventuell müsste set "a=1000" vor das 1. For und der erste Teil vor dem Unterstrich seperiert werden in etwa so
@echo off

set "a=1000"  

for /f "usebackq" %%i in ("Kuerzel.txt") do (  
  for %%j in ("*_??%%i???_*.wav") do (  
    for /f "tokens=1* delims=_" %%k in ("%%~j") do (  
      set /a a +=1
      set "File=%%~l"  
      setlocal enabledelayedexpansion
      set "File2=%%k_!a:~-3!!File:~2!"  
      ren "%%k_!File!" "!File2!"  
      endlocal
) ) )

for %%j in ("*.wav") do (  
  for /f "tokens=1* delims=_" %%k in ("%%~j") do (set "File=%%~l"  
    setlocal enabledelayedexpansion
    ren "%%k_!File!" "%%k_!File:~1!"  
    endlocal
) )

Gruß Phil
jiggyjones
jiggyjones 04.04.2011 um 17:52:49 Uhr
Goto Top
ich versteh nothing

ist das jetzt das endskript?
Skyemugen
Skyemugen 04.04.2011 um 18:12:38 Uhr
Goto Top
Zitat von @pieh-ejdsch:
braucht NICHT zu sein da ja : for %%j in ("?_??%%i*.wav") do ...
mit dem Platzhalter FrageZeichen oben schon definiert worden ist.

Aloha Phil,

*gg* umgestellt auf * hast du es aber dennoch jetzt ;) (Ich war mir persönlich nicht sicher, ob ? für mehrere Stellen gelten kann ...)
hatte es nur überflogen und mich irgendwie auf das Ende konzentriert (Montags eben ...)

muss mich selber erst einmal durch deinen Code wuseln *g*

greetz André
pieh-ejdsch
pieh-ejdsch 04.04.2011 um 18:30:01 Uhr
Goto Top
ääähhm ja - so in etwa schon.


starte das Ding mit dieser CMD-Line-Zeile

for /d /r "D:\VerZeichnissDerAbermillionenOrdner" %i in (*) do pushD "%i" && "d:\DieUmbenennungsBatch.cmd" && popD  

falls Du eine Ordner behandlung a la ParameterÜbergabe möchtest muss Du pushD %1 am Anfang und popD am Ende der Batch einfügen.

[Edit]
ja ich habs jetzt auf Sternchen Umgestellt - dafür habe ich ja auch noch: for /f "tokens=1* delims=_" .... falls am Anfang mal mehr ist ...
Montag kommt man immer so schwer in die Gänge - vor allem wenn Sonntag "Supersonnescheinwettermitfastzwanziggradindersonne" und heute "Sch???wetter" ist.
[/Edit]

Gruß Phil
bastla
bastla 04.04.2011 um 18:49:18 Uhr
Goto Top
@ph
Da ja die Namenskonvention nicht abschließend beschrieben wurde (und daher insbes auch nicht klar ist, ob auf "_" auch - an anderer Stelle als der eingefügten Nummer - eine Null folgen kann), wäre mir die Vereinfachung des letzten Teiles auf
for %%j in ("*_0*.wav") do (  
    set "File=%%~nxj"     
    setlocal enabledelayedexpansion
    ren "%%j" "!File:_0=_!"  
    endlocal
)
etwas zu riskant - wenn allerdings anstelle von 1000 als Startwert 1000000 und als Zeile 11
set "File2=%%k_!a!!File:~2!"
vewendet würde, sollte es mit
<code">for %%j in ("*_10000*.wav") do (
set "File=%%~nxj"
setlocal enabledelayedexpansion
ren "%%j" "!File:_10000=_!"
endlocal
)

eigentlich mit ziemlicher Sicherheit klappen ...

Grüße
bastla
60730
60730 04.04.2011 um 23:52:56 Uhr
Goto Top
moin,

Zitat von @jiggyjones:
ich versteh nothing

ist das jetzt das endskript?

ähhh versteh ich das jetzt richtig und du fragst nach einem script, läßt dir ein paar schreiben und wenns scheinbar mal Zeit wird - fragst du nach, ob das Script schon endgültig ist?

Selber schreiben - nada
Selber testen - niente

Schankedöhn
pieh-ejdsch
pieh-ejdsch 05.04.2011 um 00:05:52 Uhr
Goto Top
moin Timo,

und wenns scheinbar mal Zeit wird

ja sowas kann schon mal länger dauern so ca 2 Monate bei einigen Umänderungen...

Gruß Phil
jiggyjones
jiggyjones 06.04.2011 um 10:21:56 Uhr
Goto Top
Moin, welches script soll ich jetzt testen?
bastla
bastla 06.04.2011 um 11:03:07 Uhr
Goto Top
Hallo jiggyjones!
welches script soll ich jetzt testen?
Ich würde an Deiner Stelle gar nicht testen, sondern einfach irgend eine Variante auf Deine Daten loslassen ... face-wink

Grüße
bastla
Skyemugen
Skyemugen 06.04.2011 um 11:12:17 Uhr
Goto Top
Aloha bastla!

Hör bloß auf, am Ende macht er das noch, weil man ihm das echo vor ren nicht mit auf den Weg gegeben hat ... und dann passt doch irgendetwas nicht & schon ist das Gejammer groß

@jiggyjones
...um mal mit einem Spruch aus der Werbung zu kommen:
It's time for another revolution.
oder anders ausgedrückt:
Learning by selfdoing, setze doch bastlas Optimierung in Phils Skript an die dazugehörige Stelle, setze ein echo jeweils vor ren und ziehe Phils Kommentar vom 04.04.2011, 18:30:01 Uhr zu Gemüte und versuche selbst zu verstehen, was eigentlich wie geschehen soll ...

greetz André
jiggyjones
jiggyjones 06.04.2011 um 15:23:00 Uhr
Goto Top
Ich verstehe die Scripts aber nicht face-sad
60730
60730 06.04.2011 um 16:19:24 Uhr
Goto Top
Zitat von @jiggyjones:
Ich verstehe die Scripts aber nicht face-sad

... und ich ehrlich geschrieben Fragesteller wie dich nicht oder besser warum keiner mehr Bäcker werden will und jeder in die IT.....
jiggyjones
jiggyjones 06.04.2011 um 16:24:12 Uhr
Goto Top
Ach timo deine konstruktiven beiträge helfen mir ungemein...ich bin halt nicht aus dem IT bereich...bzw nicht aus dem scripting bereich..
jiggyjones
jiggyjones 06.04.2011 um 16:37:22 Uhr
Goto Top
Da ihr untereinander euch ausgetauscht hab verwirren mich die vielen einträge nun, welches skript soll ich bitte ausprobieren? das hier?

@echo off

set "a=1000"

for /f "usebackq" %%i in ("Kuerzel.txt") do (
for %%j in ("*_??%%i???_*.wav") do (
for /f "tokens=1* delims=_" %%k in ("%%~j") do (
set /a a +=1
set "File=%%~l"
setlocal enabledelayedexpansion
set "File2=%%k_!a:~-3!!File:~2!"
ren "%%k_!File!" "!File2!"
endlocal
) ) )

for %%j in ("*.wav") do (
for /f "tokens=1* delims=_" %%k in ("%%~j") do (set "File=%%~l"
setlocal enabledelayedexpansion
ren "%%k_!File!" "%%k_!File:~1!"
endlocal
) )
Biber
Biber 06.04.2011 um 18:34:32 Uhr
Goto Top
[OT] @jiggyjones
welches skript soll ich bitte ausprobieren? das hier?

Falls du eine ernst [und nicht etwa hämisch gemeinte] Antwort von mir zumindest wohlwollend an dich heranlässt:

Gar keins.

Die kleine Fachdiskussion oben sollte dir doch hinreichend belegt haben, dass es absolut fahrlässig, ein totales va-banque-Spiel wäre,
irgendeinen kryptischen Zeichensalat , der aussieht wie vom Mähdrescher eingeholt, auf deine Echt-Daten loszulassen.

Du kannst keine reale Risikokalkulation abgeben, weisst nicht, was passiert, kannst es nicht allein zurückdrehen..
.-->alles K.O.-Kriterien.

Und die Jungs & Mädels hier haben [höchstens] das mit umgesetzt, was du als erwähnenswert gesendet hast.
Und davon auch nur das, was sie auch so empfangen haben, wie du es gemeint hast.

--> hat doch keinen Sinn. Du bist [noch] nicht soweit, dass du allein einen der Ansätze nachvollziehen und anpassen kannst,
--> und einen, der während der -ich sag mal "Migration" der Daten - neben dir steht für den Notfall hast du auch nicht.

---> unterm Strich: Jemand mieten, der es macht --oder-- drei Tage lang Vollzeit Skripten üben.

Für den Kram oben wirst du kein Rundum-Sorglos-Paket bekommen können.

Grüße
Biber
[/OT]

...obwohl.... ist es wirklich "[OT]" in diesem Fall???
jiggyjones
jiggyjones 14.04.2011 um 13:38:00 Uhr
Goto Top
Natürlich teste ich die batches nicht gleich an den original daten sondern erstmal an einer kopie, so können sich skripter und enduser sich austauschen um zum ziel zu kommen...ich lese doch oft hier das die skripter nicht gefordert werden weil leute einfach nur zu einfache skript anfragen hier reinschreiben...

ich bin mir dem risiko bewusst und das ist überhaupt kein problem...ich kann mir keinen mieten und habe auch keinen zeitdruck von daher ist doch ein solches forum für den austausch eigentlich klasse...

habe bisher auch nie schlechte erfahrungen hier gemacht, hab mir einige sehr gute skripte schreiben lassen und die skripter konnten sich dann über meine anfrage austauschen und mit ihren skript erfahrungen sich an meine anfragen machen...


wenn ich mich bei meinen anfragen nicht richtig ausdrücke kann man auch noch mal nachfragen und ich erkläre es gern so das es jeder versteht...
jiggyjones
jiggyjones 24.04.2011 um 13:35:20 Uhr
Goto Top
frohe ostern..will mir jetzt keiner helfen?
99045
99045 24.04.2011 um 13:43:52 Uhr
Goto Top
Hallo und auch dir frohe Ostern.

Versucht zu helfen haben doch schon diverse User, nur

Zitat von @Biber:
---> unterm Strich: Jemand mieten, der es macht --oder-- drei Tage lang Vollzeit Skripten üben.
Für den Kram oben wirst du kein Rundum-Sorglos-Paket bekommen können.

sollte eigentlich unmissverständlich sein.

Gruß