Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mit Batch Verzeichnisse zählen und in Variable speichern

Frage Entwicklung Batch & Shell

Mitglied: yakazaa

yakazaa (Level 1) - Jetzt verbinden

30.10.2008, aktualisiert 13:25 Uhr, 9533 Aufrufe, 14 Kommentare

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:

.\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...
Mitglied: bastla
30.10.2008 um 10:23 Uhr
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:
01.
@echo off & setlocal 
02.
set KNr=1000 
03.
for /f "delims=_" %%i in ('dir /b /ad /on "BATCH FILE\Kundendaten\0*_*" 2^>nul') do set "KNr=1%%i" 
04.
set /a KNr+=1 
05.
echo Naechste Kundennummer: %KNr:~-3%
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]
Bitte warten ..
Mitglied: Biber
30.10.2008 um 10:28 Uhr
Moin yakazaa,

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]
Bitte warten ..
Mitglied: yakazaa
30.10.2008 um 10:39 Uhr
Hallo bastla,

Danke für deine schnelle Hilfe - wie immer !

Soweit habe ich dein Skript schon eingebaut und es klappt, wie erwartet, 1A !
Naja, sagen wir mal 1B
Wieso sind denn meine IDs jetzt 001, 002 usw ?
Ist eigentlich nicht schlimm, aber die Frage ist was beim 1000sten Kunden passiert... (Ich weiß´, ist utopisch...)

Danke schonmal trotzdem !
Bitte warten ..
Mitglied: yakazaa
30.10.2008 um 10:42 Uhr
Hallo Biber !

Sorry, aber bastla war leider schneller

Was deinen Einwand mit dem löschen angeht:
Darüber hatte ich mir tatsächlich noch keine Gedanken gemacht...
In bastla's Methode sollte das allerdings nciht weiter stören, denn er sucht ja immer die höchste vergebene. Ob dazwischen welche frei sind ist ja egal...

Danke dir aber auch nochmal, yaka
Bitte warten ..
Mitglied: yakazaa
30.10.2008 um 10:43 Uhr
[Edit]Grüße zurück :-P [/EDIT]
Bitte warten ..
Mitglied: bastla
30.10.2008 um 10:44 Uhr
Hallo yakazaa!

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
Bitte warten ..
Mitglied: yakazaa
30.10.2008 um 10:49 Uhr
Danke... Bin noch nicht so ganz fit: krank geschrieben...

Mal was anderes:
Ich muss ja hinterher, wenn ich z.B.: DAtensätze bearbeiten will,
die Dinger auch durchsuchen können...

Hier hab ich mir die Verschiedenen Trennzeichen überlegt :
Nach der ID ein Unterstrich
Nach de Vornamen ein Punkt

Kannst du mir evtl. an einem Beispiel erklären wie ich das nun machen muss ?

Beispiel: Suche nach ID.

Diese ist ja immer 4-stellig

Also könnte ich jetzt entweder sagen:
Durchsuche jeden Dateinamen und schmeiß alles nach der 4ten Stelle weg, oder halt eben alles nach und incl. dem Unterstrich.
Bitte warten ..
Mitglied: bastla
30.10.2008 um 11:01 Uhr
Hallo yakazaa!

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 "####_*.*"
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
dir /s /b "*_Nachname.*.*"
nach dem Namen ...

Grüße
bastla
Bitte warten ..
Mitglied: yakazaa
30.10.2008 um 11:17 Uhr
Ich erzähl hier wieder nur die Häfte....

OK, nochmal meine Schuld:

Ich habe gerade mal einen Datensatz als Demo erzeugt:

In der TXT Datei steht drin:

Nachname
Vorname
Straáe
Hausnummer
PLZ
Ort
eMail
Festnetz
Mobil
gesch„ftl

Halt eben für alles eine Zeile.
Erzeugt wird Sie durch mit SET /P gefüllte Variablen die ich anschließend dann mittes ECHO %VAR%>>Datensatz.txt
wegschreibe.

Am einfachsten ist es dann warscheinlich,
wenn ich das Ergebnis von

dir /s /b "%ID%_*.*"

also sprich den Ordnernamen in einer Variable speicher.
Dann kann ich ja hinterher .\%ORDNER%\Datensatz.txt mit nem Editor öffnen lassen und die Daten ggf. abändern...

Oder hab ich da wo wieder an irgendetwas nicht gedacht ?!
Bitte warten ..
Mitglied: yakazaa
30.10.2008 um 11:33 Uhr
Also scheinbar hab ich was vergessen, denn wenn ich :

@ECHO ON
CD ".\Kundendaten\"
dir /s /b "0001_*.*" > %ORDNER%
ECHO %ORDNER%
pause

testweise ausführe bekomme ich immer einen Syntaxfehler genannt...
Bitte warten ..
Mitglied: yakazaa
30.10.2008 um 12:07 Uhr
Zitat von yakazaa:

@ECHO ON
CD ".\Kundendaten\"
dir /s /b "0001_*.*" > %ORDNER%
ECHO %ORDNER%
pause

Nach ein bischen googeln habe ich noch folgende Variante probiert:

@ECHO ON
dir /s /b "0001_*.*" > erg.tmp
set ORDNER = < erg.tmp
ECHO %ORDNER%
pause

Leider kommt dann als Ausgabe:

D:\Kundenverwaltung\module\kunden>dir /s /b "0001_*.*" 1>erg.tmp
D:\Kundenverwaltung\module\kunden>set ORDNER = 0<erg.tmp
D:\Kundenverwaltung\module\kunden>ECHO
ECHO ist eingeschaltet (ON).

Wenn ich aber den Befehl:

dir /s /b "0001_*.*"

So eingebe bekomme ich als Ausgabe:

D:\Kundenverwaltung\module\kunden\Kundendaten\0001_Tuennerhoff.Dominik

Genau das, steht auch in der o.g. erg.tmp Datei drin.
Nur, will er das nicht in die Variable Ordner speichern...

Irgendeine Idee ?
Bitte warten ..
Mitglied: yakazaa
30.10.2008 um 12:37 Uhr
Auch wenn ich hier mitlerweile Selbstgespräche zu führen scheine: :-P

:SUCHE_NAME
dir /s /b *%NACHNAME%.%VORNAME%> test.tmp
FOR /f %%f IN (test.tmp) DO SET ORDNER=%%f
GOTO SUCHE_WEITER

:SUCHE_ID
dir /s /b "%ID%_*.*"> test.tmp
FOR /f %%f IN (test.tmp) DO SET ORDNER=%%f
GOTO SUCHE_WEITER

:SUCHE_WEITER
DEL test.tmp
NOTEPAD "%ORDNER%\Datensatz.txt"

Das läuft soweit auch, zumindest wird der Ordnername jetzt in der Variable %ORDNER% gespeichert, es gibt nur 1 Problem:

Wenn ich die Datei nun aufrufen möchte, also mit:

NOTEPAD "%ORDNER%\Datensatz.txt"

beinhaltet %ORDNER% scheinbar den Pfad (is ja auch korrekt) und ein Leerzeichen. Naja, und dann findet er den Pfad natürlich nicht..

Ne Idee wieso er das Leerzeichen da mit rein nimmt oder wie ich ihm sagen kann, dass er das letzte Zeichen der Variable %ORDNER% wegschmeißen soll ?
Bitte warten ..
Mitglied: Biber
30.10.2008 um 12:46 Uhr
Moin yakazaa,

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
Bitte warten ..
Mitglied: yakazaa
30.10.2008 um 13:25 Uhr
Bedankt !
Also eigentlich Ich = doof, nicht Batch !

Ganz doof dann aber doch nun nicht,
hab mir mit:

SET ORDNER_KORR=%ORDNER:~0,-1%

was zurechtgedocktert
Danke trotzdem nochmal, werds später ändern...

Jetzt erstmal ein bischen testen.
Kundenverwaltung habe ich schonmal,

Jetzt kommt der ganze Mist mit Rechnungen erstellen und so

Mal schaun wie gut mein Konzept dabei war, jede Kundeninfo in eine Zeile zu schreiben...
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Wert in Registry suchen und in Variable speichern (2)

Frage von J.Troll zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...