Mit Batch Verzeichnisse zählen und in Variable speichern
Hallo zusammen,
erstelle gerade -nein, das ist mein voller Ernst - eine Kundenverwaltung mit BATCH.
Der einzige Grund dafür ist eigentlich, dass ich mich bald mit dem RIS Server beschäftigen muss und ich es deshlab für eine gute Übung halte.
Außerdem habe ich mich gerade selbstständig gemacht...
Ach was red ich hier noch blöd rum:
Ich möchte nun meinen Kunden (deren Daten ich in einzelnen Verzeichnissen sammel) mit einer eindeutigen ID versehen.
Verzeichisstruktur:
Um dies zu realisieren habe ich mir überlegt, den Ordner Kundendaten zu durchsuchen und dabei soll mir BATCH die Verzeichnisse zählen.
Dieser Wert soll dann um 1 erhöht werden und fortan vor dem erstellten Kundenordner erscheinen.
Blöd erklärt, ich geb euch mal nen Beispiel:
0 Verzeichnisse da -> Wert=1
Neukunde wird angelegt mit dem Ordner 001_Nachname.Vorname
10 Verzeichnisse da -> Wert=11
Neukunde wird angelegt mit dem Ordner 011_Nachname.Vorname
Ich habe von der gesamten Geschichte eigentlich auch schon alles zusammen, bis auf den Zählmechanismus...
Da hoffe ich nun auf eure Hilfe...
erstelle gerade -nein, das ist mein voller Ernst - eine Kundenverwaltung mit BATCH.
Der einzige Grund dafür ist eigentlich, dass ich mich bald mit dem RIS Server beschäftigen muss und ich es deshlab für eine gute Übung halte.
Außerdem habe ich mich gerade selbstständig gemacht...
Ach was red ich hier noch blöd rum:
Ich möchte nun meinen Kunden (deren Daten ich in einzelnen Verzeichnissen sammel) mit einer eindeutigen ID versehen.
Verzeichisstruktur:
.\BATCH FILE\Kundendaten\ID_Kundenachname.Kundenvorname\Datensatz.txt
Um dies zu realisieren habe ich mir überlegt, den Ordner Kundendaten zu durchsuchen und dabei soll mir BATCH die Verzeichnisse zählen.
Dieser Wert soll dann um 1 erhöht werden und fortan vor dem erstellten Kundenordner erscheinen.
Blöd erklärt, ich geb euch mal nen Beispiel:
0 Verzeichnisse da -> Wert=1
Neukunde wird angelegt mit dem Ordner 001_Nachname.Vorname
10 Verzeichnisse da -> Wert=11
Neukunde wird angelegt mit dem Ordner 011_Nachname.Vorname
Ich habe von der gesamten Geschichte eigentlich auch schon alles zusammen, bis auf den Zählmechanismus...
Da hoffe ich nun auf eure Hilfe...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 100587
Url: https://administrator.de/contentid/100587
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
14 Kommentare
Neuester Kommentar
Hallo yakazaa!
Zählen musst Du eigentlich nicht - es sollte ja genügen, die bislang höchste KNr zu finden und um 1 zu erhöhen:
Grüße
bastla
[Edit]
@Biber: Wenn Du auch so "kundenorientiert" bist und die Anforderung wörtlich nimmst - ich war da ja weniger "Rechtsüberholer", als eher "Verfahrensabkürzer" (was, bei genauerer Überlegung, aber etwas widersprüchlich klingt: Wenn man/frau sich verfährt, kommt ja eher selten eine Abkürzung raus ...)
Auf jeden Fall: Grüße zurück ...
[/Edit]
Zählen musst Du eigentlich nicht - es sollte ja genügen, die bislang höchste KNr zu finden und um 1 zu erhöhen:
@echo off & setlocal
set KNr=1000
for /f "delims=_" %%i in ('dir /b /ad /on "BATCH FILE\Kundendaten\0*_*" 2^>nul') do set "KNr=1%%i"
set /a KNr+=1
echo Naechste Kundennummer: %KNr:~-3%
bastla
[Edit]
@Biber: Wenn Du auch so "kundenorientiert" bist und die Anforderung wörtlich nimmst - ich war da ja weniger "Rechtsüberholer", als eher "Verfahrensabkürzer" (was, bei genauerer Überlegung, aber etwas widersprüchlich klingt: Wenn man/frau sich verfährt, kommt ja eher selten eine Abkürzung raus ...)
Auf jeden Fall: Grüße zurück ...
[/Edit]
Moin yakazaa,
der Zählmechanismus könnte skizziert so aussehen (Demo am CMD-Prompt):
Mimik:
Grüße
Biber
P.S. Hast Du denn auch einen Plan, wie Du Kunden(ordner) berücksichtigst, die mal gelöscht werden??
Wenn Kunde(nordner) "037_AngieM" gelöscht wird, dann reduziert das doch die Anzahl der Ordner und auch die nächste freie Ordner-Nummer.
[Edit] P.P.S. Biber grüßt alle Rechtsüberholer! *winkz* [/Edit]
der Zählmechanismus könnte skizziert so aussehen (Demo am CMD-Prompt):
>(set cnt=1001 & @for /d %i in (D:\kunden\*) do @set /a "cnt+=1">nul) & @echo set nextdir=!cnt:~-3!
set nextdir=041
Mimik:
- Anfangswert "cnt" wird mit 1001 definiert
- mit FOR/D werden alle Unterordner im Verzeichnis D:\Kunden durchgeeiert (im Beispiel 40 vorhandene Ordner)
- je "gezählter" Ordner wird mit "set /a cnt+1" der Wert 1001 um 1 erhöht-->Ergebnis des großen geklammerten Ausdrucks=1041
- von 1041 die letzten 3 Stellen mit "set nextdir=!cnt:~-3!" ermitteln
- bzw. ohne meine Voreinstellung "Setlocal EnableDelayedExpansion" kann das auch in eine neue Zeile als "Set nextDir=%cnt:~-3%
- Ergebnis so oder so bei 40 vorhandenen Ordnern: %nextDir%=041..... as should do.
Grüße
Biber
P.S. Hast Du denn auch einen Plan, wie Du Kunden(ordner) berücksichtigst, die mal gelöscht werden??
Wenn Kunde(nordner) "037_AngieM" gelöscht wird, dann reduziert das doch die Anzahl der Ordner und auch die nächste freie Ordner-Nummer.
[Edit] P.P.S. Biber grüßt alle Rechtsüberholer! *winkz* [/Edit]
Hallo yakazaa!
... lässt sich aber leicht anpassen: Anstelle von 1000 einfach 10000 und statt -3 eben -4 verwenden ...
Grüße
bastla
Wieso sind denn meine IDs jetzt 001, 002 usw ?
Was genau meinst du damit? Wenn Du bisher noch keine Ordner nach dem Schema "###_NN.VN" angelegt hattest, beginnt die Zählung natürlich bei 1 ...... die Frage ist was beim 1000sten Kunden passiert...
Die Verwendung von 3 Stellen war doch Deine (pessimistische ) Vorgabe ...... lässt sich aber leicht anpassen: Anstelle von 1000 einfach 10000 und statt -3 eben -4 verwenden ...
Grüße
bastla
Hallo yakazaa!
Wie sollen denn Deine "Datensätze" denn aussehen? Bis jetzt war ja nur von Ordnern die Rede ...
Grundsätzlich kannst Du aber mit
nach einer ID suchen (und erhältst alle nach diesem Schema benannten Ordner und - ansonsten "/ad" oder "/a-d" hinzufügen - Dateien als Ergebnis), oder mit
nach dem Namen ...
Grüße
bastla
Ich muss ja hinterher, wenn ich z.B.: DAtensätze bearbeiten will,
die Dinger auch durchsuchen können...Wie sollen denn Deine "Datensätze" denn aussehen? Bis jetzt war ja nur von Ordnern die Rede ...
Grundsätzlich kannst Du aber mit
dir /s /b "####_*.*"
dir /s /b "*_Nachname.*.*"
Grüße
bastla
Moin yakazaa,
Vermeidung:
Grüße
Biber
Ne Idee wieso er das Leerzeichen da mit rein nimmt
Weil Batche doof wie Brot sind und alles machen, was Du ihnen sagst und Du ein abschließendes Leerzeichen hier hast....
:Suche_ID
dir /s /b "%ID%_*.*"> test.tmp
FOR /f %%f IN (test.tmp) DO SET ORDNER=%%f_ <----hier is' ein trailing blank
Vermeidung:
...
:Suche_ID
FOR /f %%f IN ('dir /s /b "%ID%_*.*"') DO SET "ORDNER=%%f"
Grüße
Biber