Verarbeitung bzw. Auswertung einer TXT-Datei und entsprechend Verzeichnisse umbenennen
Ich benötige eine Batch die zB. im Ordner C:\Temp bei allen vorhanden Verzeichnisnamen die ersten 4 Stellen ausliest. In einer erstellten 'abgleich.txt' die passende Zahl sucht (Zahl vor dem Semikolon) und anschließend dieses Verzeichnis mit der neuen Beschreibung (nach dem Semikolon) umbenennt!
Beispielformatierung in abgleich.txt:
3650;3648 - Blumenvase lila
Hallo an Alle,
Das Szenario:
Ich habe zwei Inventarliste(ALT).txt und Inventarliste(NEU).txt die abgeglichen werden sollen.Von dem alten Artikelbestand gibt es pro Artikel ein Verzeichnis (exakt gleiche Namen wie in der Inventarliste(ALT).txt). Master soll nun die neue Inventarliste werden. Und entsprechend die alten (vorhandenen) Verzeichnisse umbenannt werden!
Dummerweise gibt es zum Teil eine neue Nummerierung bei der neuen Inventarliste(NEU).txt und entsprechend sollen die alten Verzeichnisse umbenannt werden. Hierzu habe ich ich eine TXT-Datei abgleich.txt erstellt!
ALT OrdnerStruktur sowie Inhalt der Inventarlisten(ALT).txt
NEU OrdnerStruktur sowie Inhalt der Inventarlisten(NEU).txt
An dem Beispiel ist ersichtlich, dass die Artikelbezeichnung sowie die Nummerierung nicht identisch sind. Inhaltlich haben sie die gleichen Artikel (leider ist die Rechtschreibung verschieden!)
Zur Aufgabe:
Ich habe jetzt eine TXT-Datei 'abgleich.txt' erstellt mit folgender Formatierung:
Hier kann man sehr gut die Unterschiede erkennen
Zur Erklärung:
(1)1. Zahl (4 Stellen) sind die ersten 4 Zahlen der bestehenden Artikelverzeichnisse bzw. Inventarlisten(ALT).TXT (beide sind identisch!). Nur die Zahl ist "eindeutig", die alte Artikelbeschreibung ist irrelevant!
(2)Trennzeichen ist ein Semikolon
(3)Neuer Verzeichnisnamen
Ich benötige eine Batch die zB. im Ordner C:\Temp bei allen vorhanden Verzeichnisnamen die ersten 4 Stellen ausliest. In der abgleich.txt die passende Zahl sucht (Zahl vor dem Semikolon) und anschließend dieses Verzeichnis mit der neuen Beschreibung (nach dem Semikolon) umbenennt!
Danke im Voraus für eure Lösungsvorschläge!
Grüße
Andychrist
[Edit: Rechtschreibung im Titel korrigiert]
umbennen ->umbenennen
Beispielformatierung in abgleich.txt:
3650;3648 - Blumenvase lila
Hallo an Alle,
Das Szenario:
Ich habe zwei Inventarliste(ALT).txt und Inventarliste(NEU).txt die abgeglichen werden sollen.Von dem alten Artikelbestand gibt es pro Artikel ein Verzeichnis (exakt gleiche Namen wie in der Inventarliste(ALT).txt). Master soll nun die neue Inventarliste werden. Und entsprechend die alten (vorhandenen) Verzeichnisse umbenannt werden!
Dummerweise gibt es zum Teil eine neue Nummerierung bei der neuen Inventarliste(NEU).txt und entsprechend sollen die alten Verzeichnisse umbenannt werden. Hierzu habe ich ich eine TXT-Datei abgleich.txt erstellt!
ALT OrdnerStruktur sowie Inhalt der Inventarlisten(ALT).txt
0000 - Blaues Geländer
0001 - Treppenabsatz beige
....
3648 - Duschkopf chrom
3649 - Duschkopf blau
3650 - Blumenvase lila
3651 - Blumenvase grün
3652 - Abflußrohr
...
3753 - Stehlampe Modell Klara
3754 - Funkuhr Modell Schwarzwald
3755 - Tisch
....
NEU OrdnerStruktur sowie Inhalt der Inventarlisten(NEU).txt
0000 - Blaues Geländer
0001 - Treppenabsatz beige
....
3648 - Blumenvase lila
3649 - Duschkopf blau
3650 - Duschkopf CHROM
3651 - Abflußrohr
3652 - Blumenvase grün
...
3753 - Stehlampe Modell Klara
3754 - Funkuhr Modell Schwarzwald
3755 - Tisch
....
An dem Beispiel ist ersichtlich, dass die Artikelbezeichnung sowie die Nummerierung nicht identisch sind. Inhaltlich haben sie die gleichen Artikel (leider ist die Rechtschreibung verschieden!)
Zur Aufgabe:
Ich habe jetzt eine TXT-Datei 'abgleich.txt' erstellt mit folgender Formatierung:
Hier kann man sehr gut die Unterschiede erkennen
...
3650;3648 - Blumenvase lila
3649;3649 - Duschkopf blau
3648;3650 - Duschkopf CHROM
3652;3651 - Abflußrohr
3651;3652 - Blumenvase grün
...
Zur Erklärung:
3650;3648 - Blumenvase lila
(2)Trennzeichen ist ein Semikolon
(3)Neuer Verzeichnisnamen
Ich benötige eine Batch die zB. im Ordner C:\Temp bei allen vorhanden Verzeichnisnamen die ersten 4 Stellen ausliest. In der abgleich.txt die passende Zahl sucht (Zahl vor dem Semikolon) und anschließend dieses Verzeichnis mit der neuen Beschreibung (nach dem Semikolon) umbenennt!
Danke im Voraus für eure Lösungsvorschläge!
Grüße
Andychrist
[Edit: Rechtschreibung im Titel korrigiert]
umbennen ->umbenennen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 06.11.2009 um 11:11:25 Uhr
...und entsprechend Verzeichnisse umbennen...
#rgc=624Content-ID: 128777
Url: https://administrator.de/contentid/128777
Ausgedruckt am: 24.11.2024 um 23:11 Uhr
15 Kommentare
Neuester Kommentar
Hallo Andi,
guck mal ....
Sollte soweit selbsterklärend sein.
Wohin schick ich die Rechnung?
MfG Sam
guck mal ....
const abgleichtxt = "abgleich.txt" 'Pfad zu deiner Ableich.txt mit Dateianamenangabe
'In diesem Fall im gleichen Ordner wie diese Datei!
const pfad = "" 'Pfad zu deinem Verzeichnis wo all die Ordner liegen - MUß mit \ enden!!!
'Nur "" heißt im gleichen Ordner wie diese Datei!
dim objshell, objfso
dim open_abgleichtxt, zeile, id, text
set objshell = createobject("wscript.shell")
set objfso = createobject("scripting.filesystemobject")
set open_abgleichtxt = objfso.opentextfile(abgleichtxt,1,false) 'Hier wird die Ableich.txt geöffnet
do until open_abgleichtxt.atendofstream 'Solange durchlaufen bis sie zu ende ist
zeile = open_abgleichtxt.readline() 'Aktuelle Zeile wird eingelesen
id = split(mid(zeile,1,9),";") 'ID alt & neu werden in Array gelesen
text = mid(zeile, 10) 'Artikeltext wird extrahiert
if objfso.folderexists(pfad & id(0) & text) then 'Wenn der Ordner bereits vorhanden ist ...
objfso.movefolder pfad & id(0) & text, pfad & id(1) & text '... wird er umbenannt
else 'oder ...
objfso.createfolder(pfad & id(1) & text) '... erstellt
end if 'Ende der Ordnerprüfung
loop 'Ende der Schleife
open_abgleichtxt.close 'Ableich.txt schließen
Sollte soweit selbsterklärend sein.
Wohin schick ich die Rechnung?
MfG Sam
Servus,
langsam aber sicher wird deine Inventarliste aber zum running Gag?
Verarbeitung bzw. Auswertung einer TXT-Datei und entsprechend Verzeichnisseumbennen
Haben wir / Biber Bastla dir nicht schon genug Tipps gegeben, das du aus einer älteren gelösten ähnlichen Frage - die neue Anforderung nicht selber lösen kannst?
Gruß
langsam aber sicher wird deine Inventarliste aber zum running Gag?
Verarbeitung bzw. Auswertung einer TXT-Datei und entsprechend Verzeichnisseumbennen
Haben wir / Biber Bastla dir nicht schon genug Tipps gegeben, das du aus einer älteren gelösten ähnlichen Frage - die neue Anforderung nicht selber lösen kannst?
Gruß
Hallo Leute, (TimoBeil & H41mSh1COR)
sollte man denn bei solchen Fällen eher nicht Helfen?
Ich kann das schon nachvollziehen - wie ihr das seht. Als erstes gucke ich idR. auch erstmal mit der Frage bei Google nach.
Nur für Leute die so gar keine Ahnung haben ....
Jetzt habe ich bei TimoBeil gelesen das unser "Kunde" wohl schon Tipps bekommen hat ....
Wie seht Ihr das denn? Helfen - Verweisen - oder Stehenlassen????
Gruß Sam
sollte man denn bei solchen Fällen eher nicht Helfen?
Ich kann das schon nachvollziehen - wie ihr das seht. Als erstes gucke ich idR. auch erstmal mit der Frage bei Google nach.
Nur für Leute die so gar keine Ahnung haben ....
Jetzt habe ich bei TimoBeil gelesen das unser "Kunde" wohl schon Tipps bekommen hat ....
Wie seht Ihr das denn? Helfen - Verweisen - oder Stehenlassen????
Gruß Sam
Servus Sam,
ganz eindeutig ich bin für helfen.
Nur sehe ich in manchen Fällen - wie z.B diesem - die Hilfe etwas anders, als evtl. andere.
Hilfe zur Selbsthilfe oder Hilfe - ein Problem selbstständig zu lösen.
Das mit dem "running Gag" ist doppeldeutig - einmal Bibers Counter - einmal eine Inventarliste die mittlerweile Ausmasse annimmt, dass man sich irgendwann mal fragt:
Ok - da will jemand ein spezielles "Problem" auf gewisse Art & Weise lösen - helfe ich gern - weil es eine Kleinigkeit ist.
Aber im Hinterkopf denkt man, eigentlich macht man sowas ganz anders - oder andersherum - das ist ein Fall für die Bank, die garantiert keinen Kredit gibt - die Datenbank.
Und wenn (wie in dem Fall) die Tipps offensichtlich nicht ausreichen, damit jemand "sein" Progrämmchen selber erweitern kann - dann darf es nicht sein, dass Biber/Bastla und Konsorten die Wartung für "seine" Lösung übernehmen.
Von daher, und weil wir alle ja eigentlich von unserem Arbeitgeber und nicht vom Forum oder vom Arbeitgeber der Fragesteller entlohnt werden - ist bei mir persönlich - irgendwann mal Schluss.
In der Regel "versuche" ich nur auf Fragen zu antworten - die ich "blind" lösen kann und oder die mich "interessieren".
Es schadet aber nie - wenn sich "ein neuer" um ein Problem kümmert, denn jeder hat seinen eigenen Stil, Probleme zu lösen und davon können alle lernen.
Gruß
ganz eindeutig ich bin für helfen.
Nur sehe ich in manchen Fällen - wie z.B diesem - die Hilfe etwas anders, als evtl. andere.
Hilfe zur Selbsthilfe oder Hilfe - ein Problem selbstständig zu lösen.
Das mit dem "running Gag" ist doppeldeutig - einmal Bibers Counter - einmal eine Inventarliste die mittlerweile Ausmasse annimmt, dass man sich irgendwann mal fragt:
Ok - da will jemand ein spezielles "Problem" auf gewisse Art & Weise lösen - helfe ich gern - weil es eine Kleinigkeit ist.
Aber im Hinterkopf denkt man, eigentlich macht man sowas ganz anders - oder andersherum - das ist ein Fall für die Bank, die garantiert keinen Kredit gibt - die Datenbank.
Und wenn (wie in dem Fall) die Tipps offensichtlich nicht ausreichen, damit jemand "sein" Progrämmchen selber erweitern kann - dann darf es nicht sein, dass Biber/Bastla und Konsorten die Wartung für "seine" Lösung übernehmen.
Von daher, und weil wir alle ja eigentlich von unserem Arbeitgeber und nicht vom Forum oder vom Arbeitgeber der Fragesteller entlohnt werden - ist bei mir persönlich - irgendwann mal Schluss.
In der Regel "versuche" ich nur auf Fragen zu antworten - die ich "blind" lösen kann und oder die mich "interessieren".
Es schadet aber nie - wenn sich "ein neuer" um ein Problem kümmert, denn jeder hat seinen eigenen Stil, Probleme zu lösen und davon können alle lernen.
Gruß
Hallo Andy!
Ungetestet (wie eigentlich eh immer ) die Batch-Variante:
Grüße
bastla
Ungetestet (wie eigentlich eh immer ) die Batch-Variante:
@echo off & setlocal enabledelayedexpansion
set "targetdir=." & REM oder Verz. setzen z.B. set "targetdir=C:\Temp"
set "Liste=Inventarlisten(NEU).txt"
for /d %%i in ("%targetdir%\*") do (
set "Nr=%%~ni"
set Neu=
for /f "tokens=1* delims=;" %%n in ('findstr /b "!Nr:~,4!;" "%Liste%"') do set "Neu=%%b"
if defined Neu (
ren "%%i" "!Neu!"
) else (
echo Nicht umbenannt: %%i
)
)
bastla
Hi Andy,
du mußt die beiden schon verstehen... Natürlich ist das ein öffendliches Forum. Aber wenn du dir mal ansiehst wie lange und intensiv hier einige (einige viele wie timobeil, bastla, biber, dog etc.) im Forum arbeiten kannst du dir vorstellen wie oft hier die annähernd gleichen Fragen kommen. Ich selbst bin hier auch schon eine halbe Ewigkeit angemeldet, arbeite aber erst seit kurzem aktiv mit... Und es ist nicht allzu selten das wirklich sehr ähnliche Fragen kommen. Auch sehr viel das einfach auch so bei Google hätte eingegeben werden können bzw. was man mit ein wenig Recherche hätte herausfinden können. Nur leider - und das ist es was den Kollegen auf den Senkel geht - tun das die meisten nicht und posten hier erstmal. Sprich wir haben hier nachher 20-30 mal das gleiche stehen.
Nun unterstelle ich dir mal keine Ahnung von Batch oder VBS zu haben. - Wenn ich daran zurück denke wo ich angefangen habe ... naja. Es muß ja auch nicht jeder alles Wissen - dafür sind wir ja da.
Also nimm es den Jungs nicht zu sehr übel. Wenn dich jedes mal einer das gleiche fragt ohne vorher mal selber zu überlegen bekommst du garantiert auch ne Kriese.
Solltest du allerdings überhaupt keine Ahnung von dem haben was du da haben möchtest (Umsetzung etc.) - was ich mal unterstelle - ist es vollkommen ok. Allerdings würde ich persönlich das oben drüber schreiben...
IdS. Sam
du mußt die beiden schon verstehen... Natürlich ist das ein öffendliches Forum. Aber wenn du dir mal ansiehst wie lange und intensiv hier einige (einige viele wie timobeil, bastla, biber, dog etc.) im Forum arbeiten kannst du dir vorstellen wie oft hier die annähernd gleichen Fragen kommen. Ich selbst bin hier auch schon eine halbe Ewigkeit angemeldet, arbeite aber erst seit kurzem aktiv mit... Und es ist nicht allzu selten das wirklich sehr ähnliche Fragen kommen. Auch sehr viel das einfach auch so bei Google hätte eingegeben werden können bzw. was man mit ein wenig Recherche hätte herausfinden können. Nur leider - und das ist es was den Kollegen auf den Senkel geht - tun das die meisten nicht und posten hier erstmal. Sprich wir haben hier nachher 20-30 mal das gleiche stehen.
Nun unterstelle ich dir mal keine Ahnung von Batch oder VBS zu haben. - Wenn ich daran zurück denke wo ich angefangen habe ... naja. Es muß ja auch nicht jeder alles Wissen - dafür sind wir ja da.
Also nimm es den Jungs nicht zu sehr übel. Wenn dich jedes mal einer das gleiche fragt ohne vorher mal selber zu überlegen bekommst du garantiert auch ne Kriese.
Solltest du allerdings überhaupt keine Ahnung von dem haben was du da haben möchtest (Umsetzung etc.) - was ich mal unterstelle - ist es vollkommen ok. Allerdings würde ich persönlich das oben drüber schreiben...
IdS. Sam
naabend..
Jetzt mal ganz ganz ehrlich...
Das hat nicht nur was mit der Batch zu tun, sondern allgemein - kannst du keine Nummern "doppelt" benutzen - einer schreibt aus Gewohnheit die olle Nummer irgendwo rein und *flatsch* die neue "Bedeutung" greift..
Ich würde ja sogar aus der 4 Stelligen Nummer eine N1234 "Nummer" machen - aber wie gesagt - nehm es als konstruktive Kritik und denk dran eine Datenbank ist 1.0000 * besser und eigentlich ist eine DB genau für "sowas" gemacht...
Gruß
btw:
Bis jetzt kamen hier immer nur ernstgemeinte Vorschläge....
Aber wenn du magst - ich "könnte" auch gerne anders
Wenn du damit meinst Bastla / Biber oder "andere als nichthelfende bekannte - stricken sich nen Testordner um dein "Konstrukt" auszuprobieren - verpack das ganze in ein Zip file und geb den Download Link her...
Aber nicht mehr heute.. UNd denk dran - das ist dein Job - nicht unserer
Jetzt mal ganz ganz ehrlich...
Damit sich die „Nummern“ während des Umbenennungs-Prozesses nicht behindern, ist es vielleicht unumgänglich die ursprüngliche Nummerierung von 4 Stellen auf 5 Stellen zu erhöhen? Ich bin mir aber nicht sich...
Das hat nicht nur was mit der Batch zu tun, sondern allgemein - kannst du keine Nummern "doppelt" benutzen - einer schreibt aus Gewohnheit die olle Nummer irgendwo rein und *flatsch* die neue "Bedeutung" greift..
Ich würde ja sogar aus der 4 Stelligen Nummer eine N1234 "Nummer" machen - aber wie gesagt - nehm es als konstruktive Kritik und denk dran eine Datenbank ist 1.0000 * besser und eigentlich ist eine DB genau für "sowas" gemacht...
Gruß
btw:
<Ironie>
Bitte diesmal nur ernst gemeinte Lösungsvorschläge. face-wink
</Ironie>
Bitte diesmal nur ernst gemeinte Lösungsvorschläge. face-wink
</Ironie>
Bis jetzt kamen hier immer nur ernstgemeinte Vorschläge....
Aber wenn du magst - ich "könnte" auch gerne anders
Über ein positives Feedback würde ich mich freuen.
Wenn du damit meinst Bastla / Biber oder "andere als nichthelfende bekannte - stricken sich nen Testordner um dein "Konstrukt" auszuprobieren - verpack das ganze in ein Zip file und geb den Download Link her...
Aber nicht mehr heute.. UNd denk dran - das ist dein Job - nicht unserer
Hallo Andy!
Da der unmittelbar vor "b" im Alphabet aufscheinende Buchstabe nicht "n", sondern dann doch ein anderer ist, konnte das gar nicht klappen - mit der folgenden Zeile 8 sollten die Chancen deutlich besser stehen:
[Edit]
Noch besser müsste es werden (um auch der - realilstischen - Gefahr vorzubeugen, dass ein Ordner tatsächlich vorweg schon umbenannt wurde), wenn Du es mit dieser Version versuchst:
[/Edit]
Grüße
bastla
Da der unmittelbar vor "b" im Alphabet aufscheinende Buchstabe nicht "n", sondern dann doch ein anderer ist, konnte das gar nicht klappen - mit der folgenden Zeile 8 sollten die Chancen deutlich besser stehen:
for /f "tokens=1* delims=;" %%a in ('findstr /b "!Nr:~,4!;" "%Liste%"') do set "Neu=%%b"
Noch besser müsste es werden (um auch der - realilstischen - Gefahr vorzubeugen, dass ein Ordner tatsächlich vorweg schon umbenannt wurde), wenn Du es mit dieser Version versuchst:
@echo off & setlocal enabledelayedexpansion
set "targetdir=." & REM oder Verz. setzen z.B. set "targetdir=C:\Temp"
set "Liste=Inventarlisten(NEU).txt"
pushd "%targetdir%"
for /f "delims=" %%i in ('dir /b /ad') do (
set "Nr=%%~ni"
set Neu=
for /f "tokens=1* delims=;" %%a in ('findstr /b "!Nr:~,4!;" "%Liste%"') do set "Neu=%%b"
if defined Neu (
ren "%%i" "!Neu!"
) else (
echo Nicht umbenannt: %%i
)
)
popd
Grüße
bastla
Hi,
muß mich doch noch mal melden...
Nur so nebenbei, der "Konstruktive Vorschlag" von mir funktioniert einwandfrei. Ich habe nämlich genau das gemacht was timobeil gesagt hat.
Einzig hätte ich vielleicht dabei schreiben sollen das das ganze in VBS ist.
@bastla: Nichts für ungut, aber mit Batch kenn ich mich einfach nicht aus ...
Gruß Sam
muß mich doch noch mal melden...
Nur so nebenbei, der "Konstruktive Vorschlag" von mir funktioniert einwandfrei. Ich habe nämlich genau das gemacht was timobeil gesagt hat.
Einzig hätte ich vielleicht dabei schreiben sollen das das ganze in VBS ist.
@bastla: Nichts für ungut, aber mit Batch kenn ich mich einfach nicht aus ...
Gruß Sam
Hallo Andy!
Danke für die Rückmeldung - nachdem Du die Umlautproblematik (war mir zwar aufgefallen, aber ich wusste nicht, in welchem Format Deine Liste erstellt ist) auch noch gelöst hast, bleibt eigentlich nur zu hoffen, dass in den Ordnernamen keine "!" enthalten sind (Stichwort "delayedExpansion") ...
@SamTrex
Gegen eine VBS-Lösung habe ich sicherlich keine Einwände (meine ersten hier geposteten Scripts waren auch generell in VBS geschrieben ) - eigentlich habe ich auch erst hier (vor allem dank Bibers "Basisarbeit") entdeckt, wieviel mit Batch - in der CMD-Variante; die Möglichkeiten von "command.com" waren im Vergleich dazu doch sehr beschränkt - machbar ist.
Grüße
bastla
Danke für die Rückmeldung - nachdem Du die Umlautproblematik (war mir zwar aufgefallen, aber ich wusste nicht, in welchem Format Deine Liste erstellt ist) auch noch gelöst hast, bleibt eigentlich nur zu hoffen, dass in den Ordnernamen keine "!" enthalten sind (Stichwort "delayedExpansion") ...
@SamTrex
Gegen eine VBS-Lösung habe ich sicherlich keine Einwände (meine ersten hier geposteten Scripts waren auch generell in VBS geschrieben ) - eigentlich habe ich auch erst hier (vor allem dank Bibers "Basisarbeit") entdeckt, wieviel mit Batch - in der CMD-Variante; die Möglichkeiten von "command.com" waren im Vergleich dazu doch sehr beschränkt - machbar ist.
Grüße
bastla