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

per Batch Datenbank Export weiter bearbeiten

Frage Entwicklung Batch & Shell

Mitglied: Mikefield

Mikefield (Level 1) - Jetzt verbinden

21.04.2009, aktualisiert 21:55 Uhr, 4455 Aufrufe, 19 Kommentare

Habe einen Datenbank Export, von dem ich diverse Spalten und Zeilen mit einem bestimmten Wert benötige

Hallo!
Habe hier einen Datenbank Export von dem ich die Spalten "FIRSTNAME","LASTNAME","LOGINNAME", benötige.
Dieses aber nur wo in der Spalte "DELETEDFLAG", eine 0 steht. Habe schon verschiedenes versucht, komme aber nicht weiter.
Das Ergebnis soll in einer neuen Datei gespeichert werden, die Werte ohne Hochkommata und getrennt mit TAB.
Anbei ein Auszug aus dem Export:

01.
"FIRSTNAME","LASTNAME","MIDDLENAME","FULLNAME","LOGINNAME","DOMAIN","AGENTGROUP","MANAGER_NAME","PREFERREDNAME","TITLE","PASSWORD","PKEY","DISABLELOGINFLAG","HISTORY","EMPLOYEEID","LOCATION","ORGANIZATION_KEY","SOUNDEX","WEBPAGE","MANAGER_KEY","COMMUNICATEPREF","ELECTRONSIGNATURE","FULFILLMENTLIMIT","MANAGERFLAG","NOTES","VOICECONFIG","ROLE_ADMINISTRATOR","ROLE_SUPERVISOR","ROLE_AGENT","ROLE_CLERK","ROLE_POSTMASTER","ROLE_OPERATOR","DELETEDFLAG","AUTOAGENTFLAG","TASKLOAD","TASKCEILING","CHANGEPASSWORDFLAG","PREFIXNAME","SUFFIXNAME","SALUTATION","ROLE_SUPPORT","PHONE","EMAIL","SITE","DATECREATED","DATEMODIFIED","CANPANIC","DOAVAIL","DOWRAPUP","OFFLINEDELIVERY","SENIORITY","ADDRESSABLEFLAG","DISPLAYNAME","EXTERNALFLAG","ADVOCATEFLAG","OUTOFOFFICEFLAG","ROLE_CA_ADMIN","FAILEDLOGINCOUNT","LASTLOGINFAILDATE","LASTLOGINDATE","CHANGEPASSWORDDATE","SITE_KEY","LRMID_KEY","LINKGROUP_KEY","SERVERPROCESS_UUID", 
02.
"Adam","Admin","","Admin, Adam","Admin","User1","","","Adam  Admin","","E2:19b36c440d03c671d32ff6c23eb46251","100001","0","286","","","","A355A350","","","0","","0","","","{0,1,{"autoloadimp","true"}}","1","0","0","0","0","0","0","0","1","1","0","","","","0","","","","","21-Apr-2009 07:02:53 AM","Y","Y","Y","1","0","0","Admin, Adam","0","0","0","0","0","19-Apr-2009 07:31:00 PM","21-Apr-2009 07:02:53 AM","10-Sep-2008 12:00:00 AM","1","","","", 
03.
"website","server","","server, website","website","Website","","","website","","E2:49deb4c2879b7cbaaeb02927caed4590","100002","1","290","","","","S616W123","","","0","","0","","","","0","0","0","0","0","1","0","0","1","1","0","","","","0","","","","","20-Apr-2009 10:17:03 AM","Y","Y","Y","1","0","0","server, website","0","0","0","0","0","20-Apr-2009 10:17:03 AM","19-Apr-2009 07:03:24 PM","08-Dez-2008 12:00:00 AM","1","","","", 
04.
"icmbridge","server","","server, icmbridge","icmbridge","Web","","","icmbridge","","E2:fb45ccd74620fc0608766c49078c8b50","100003","0","289","","","","S616I251","","","0","","0","","","","0","0","0","0","0","1","0","0","1","1","0","","","","0","","","","","19-Apr-2009 07:00:49 PM","Y","Y","Y","1","0","0","server, icmbridge","0","0","0","0","0","","19-Apr-2009 07:00:49 PM","","1","","","", 
05.
"dcobridge1","server","","server, dcobridge1","dcobridge1","User1","","","dcobridge1","","E2:fe347ca98361b4b4515339595711fd8f","100005","0","","","","","S616D216","","","0","","0","","","","0","0","1","0","0","0","0","0","0","0","0","","","","0","","","","","29-Sep-2008 08:33:21 AM","Y","Y","Y","1","0","0","dcobridge1 server","0","0","0","0","3","29-Sep-2008 08:33:21 AM","","","1","","","", 
06.
"Hugo","Habicht","","Habicht, Hugo","ub2ch20","User1","","","Hugo","","E2:e10adc3949ba59abbe56e057f20f883e","100006","0","287","v900702","","","H123H200","","","","","","","","","0","0","1","0","0","0","0","0","1","1","0","","","","0","","","","","13-Sep-2007 08:30:24 PM","Y","Y","Y","1","0","0","Habicht, Hugo","0","0","0","0","0","19-Apr-2007 12:09:55 PM","13-Sep-2007 08:30:24 PM","05-Apr-2007 12:00:00 AM","1","","","", 
07.
 
Ich hoffe Ihr könnt mir helfen!

mf
Mitglied: bastla
21.04.2009 um 23:03 Uhr
Hallo Mikefield!

Für einen Batch sind die Daten etwas sehr unhandlich (zu viele Felder), daher eher ein VBScript:
01.
Ein = "D:\Exportdtatei.txt" 
02.
Aus = "D:\NeueDatei.txt" 
03.
 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
Daten = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLf) 
06.
 
07.
Set A = fso.CreateTextFile(Aus) 
08.
For i = 0 To UBound(Daten) 
09.
    Satz = Split(Daten(i), """") 
10.
    If UBound(Satz) >= 65 Then : If Satz(65) = "0" Then A.WriteLine Satz(1) & vbTab & Satz(3) & vbTab & Satz(9) 
11.
Next 
12.
A.Close
[Edit] Art der Zerlegung geändert, da VBS auch unter Anführungszeichen stehende Kommata als Trennzeichen interpretiert; wegen der Doppelzählung der Anführungszeichen ist der Array-Index der Felder nach der Formel "Feldnummer * 2 - 1" zu ermitteln [/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
21.04.2009 um 23:13 Uhr
Hallo MikeField,

Das geht zwar mit dem folgenden Batch, aber andere Sprachen/Tools gawk z.Bsp. sind besser geeignet.

Wenn du eine Erläuterung der Befehle brauchst, melden.

01.
::StripDeleted.cmd::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
@echo off 
03.
set DBEx=f:\test\2\DB-Export.csv 
04.
set /P Header=<%DBEx% 
05.
Call :Process %Header% 
06.
for /F "skip=1 delims=" %%A in (%DBEx%) do Call :Process %%A 
07.
goto :Eof 
08.
:Process 
09.
shift /3 
10.
shift /3 
11.
for /l %%B in (1 1 27) do shift /4 
12.
if %1 NEQ "FIRSTNAME" IF %4 NEQ "0" goto :EOF 
13.
echo %~1	%~2	%~3	%~4
Ich weiß nicht ob die TAB Zeichen in der letzten Zeile den Transportweg überstehen, sonst musst du sie in deinem Editor erneuern.
Wenn die Ausgabe ok erscheint kannst du in der letzten Zeile noch eine Umleitung anhängen >>Ausgabe.txt

Gruß
LotPings
Bitte warten ..
Mitglied: 76109
22.04.2009 um 11:51 Uhr
Hallo Mikefield,

Meine Frage wäre, ob Du den Datenbank-Export selber erstellst und ob es sich um eine Access-Datenbank-Datei handelt?
Wenn ja, wird die Datenbank ständig neu überschrieben oder nur geändert und hat sie ein Passwort, das Dir bekannt ist?

Gruß Dieter
Bitte warten ..
Mitglied: Mikefield
22.04.2009 um 16:35 Uhr
So, erst einmal Danke an alle! Die Verarbeitung funktioniert tadellos!
Habe auch schon ein wenig drum herum gebaut, wie Lastname zuerst und die Sortierung danach.

@bastla, da ich das Ergebnis noch ein wenig "tunen" möchte, hilft mir VBS nicht wirklich weiter, da ich da gar nichts mehr verstehe. Trotzdem vielen Dank!

@76109: Es ist eine Oracle Datenbank und den Export mache ich manuell. Sie wird IMHO nur geändert und nicht überschrieben.

@LotPings: Es ist ein wenig ungewöhnlich was Du da erstellt hast, und ich verstehe es nicht wirklich. Kannst Du die Zeilen mal kommentieren? Was mich wundert, ist, daß dieser :Process doppelt aufgerufen wird. Einmal nach dem set /p und dann noch einmal in der For /F Schleife. Was wird mit dem set /p eigentlich wirklich bezweckt?

Was wird mit 2x shift /3 geschoben? Hätte das nicht auch ein shift /6 gemacht? Ahh, habe mal shift /? gemacht. Kann es sein, das Du damit "Middlename und "Fullname" verschiebst um dann als %3 den "Loginname" zu erhalten? Und dann mit for /l und shift /4 den "DELETEDFLAG" als %4 erhalten?
Aber was macht dann noch die for /f Schleife?

mf
Bitte warten ..
Mitglied: bastla
22.04.2009 um 17:03 Uhr
Hallo Mikefield!

Wenn schon das VBS-Script nicht helfen konnte, vielleicht ein anderer Beitrag meinerseits ...

Was mich wundert, ist, daß dieser :Process doppelt aufgerufen wird. Einmal nach dem set /p und dann noch einmal in der For /F Schleife. Was wird mit dem set /p eigentlich wirklich bezweckt?
Damit wird die erste Zeile (Kopfzeile mit Spaltenüberschriften) in die Variable %Header% eingelesen - da diese Zeile anders als die folgenden Datensätze behandelt werden muss, wird vorweg das Unterprogramm ":Process" aufgerufen und dort mit dem Vergleich von %1 auf "FIRSTNAME" eine "Spezialbehandlung" dafür vorgenommen.
Kann es sein, das Du damit "Middlename und "Fullname" verschiebst um dann als %3 den "Loginname" zu erhalten?
Das ist das Ziel der Aktion (BTW @LotPings: sehr elegant ) - "geschoben" wird allerdings der "Loginname" (nämlich nach vorne).
Aber was macht dann noch die for /f Schleife?
Die Schleife in Zeile 6 liest alle Datensätze (ab Zeile 2, daher "skip=1" - die Feldnamen aus Zeile 1 sind ja schon erledigt) aus und übergibt sie einzeln an das Unterprogramm.

HTH
bastla
[Edit] @LotPings: Sorry, hätte sehen sollen, dass Du ohnehin schon da bist ... [/Edit]
Bitte warten ..
Mitglied: 76109
22.04.2009 um 17:06 Uhr
Hallo Mikefield,

tja, von Oracle habe ich leider keine Ahnung.

In Access hätte man eine Abrage erstellen können, die genau das exportiert, was von Dir benötigt wird.


Gruß Dieter
Bitte warten ..
Mitglied: LotPings
22.04.2009 um 17:07 Uhr
Zitat von Mikefield:
@LotPings: Es ist ein wenig ungewöhnlich was Du da erstellt hast, und ich verstehe es nicht wirklich. Kannst Du die Zeilen mal kommentieren?
Gerne
Was mich wundert, ist, das dieser :Process doppelt aufgerufen wird. Einmal nach dem set /p und dann noch einmal in der For /F Schleife.
Ich hatte zuerst vor den Header separat zu behandeln, was sich aber während des Schreibens als nicht notwendig erwies.
Zeile 4 und 5 können ersatzlos gestrichen werden. (Dafür muss skip=1 aus dem for /f Befehl entfernt werden)

Was wird mit dem set /p eigentlich wirklich bezweckt?
Siehe set /? Als Microsoft den Choice Befehl wegließ haben sie das als Ersatz geschaffen. Eine Eingabemöglichkeit in Batchdateien. Wenn man die Eingabeumleitung benutzt um eine Variable aus einer Datei zu füllen wird nur die erste Zeile gelesen und der Rest verworfen.

Was wird mit 2x shift /3 geschoben? Hätte das nicht auch ein shift /6 gemacht? Ahh, habe mal shift /? gemacht. Kann es sein, das Du damit "Middlename und "Fullname" verschiebst um dann als %3 den "Loginname" zu erhalten?
Exakt Shift /3 heißt ja nicht 3 mal shift sondern an dritter Stelle shiften.

Und dann mit for /l und shift /4 den "DELETEDFLAG" als %4 erhalten?
Ja

Aber was macht dann noch die for /f Schleife?
Die liest Zeilenweise die Eingabedatei in %%A (mit allen Anführungszeichen und Kommata) Lies hierzu mindestens 3 mal die Ausgabe von for /? genau durch
Die Subroutine trennt die übergebenen Argumente an den Kommata auf in %1..%9 um Zugriff auf weitere Argumente zu bekommen muss man sowieso shiften, kann das aber eben auch weiter hinten machen.

Hier nochmal eine gekürzte Version:
01.
::StripDeleted.cmd::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
@echo off 
03.
set DBEx=f:\test\2\DB-Export.csv 
04.
for /F "delims=" %%A in (%DBEx%) do Call :Process %%A 
05.
goto :Eof 
06.
:Process 
07.
shift /3 
08.
shift /3 
09.
for /l %%B in (1 1 27) do shift /4 
10.
if %1 NEQ "FIRSTNAME" IF %4 NEQ "0" goto :EOF 
11.
echo %~1	%~2	%~3
Gruß
LotPings
Bitte warten ..
Mitglied: LotPings
22.04.2009 um 17:21 Uhr
Zitat von bastla:
Das ist das Ziel der Aktion (BTW @LotPings: sehr elegant ) - "geschoben" wird allerdings der "Loginname"
So ein Lob von einem Senior Admin [rot-werd]

[Edit] @LotPings: Sorry, hätte sehen sollen, dass Du ohnehin schon da bist ... [/Edit]
Keine Ursache.

Gruß
LotPings

PS: Welche Emoticons werden von der Forumsoftware eigentlich in Grafiken umgesetzt?
Bitte warten ..
Mitglied: bastla
22.04.2009 um 17:30 Uhr
Hallo LotPings!
So ein Lob von einem Senior Admin [rot-werd]
Ach, lass mal stecken (und "Senior Admin" ist eine reine "Alterserscheinung" ) ...

Das "Lob" ist allerdings sehr ernst gemeint - Deine Lösungen gefallen mir sehr gut und stellen eine Bereicherung für das Forum dar.

Welche Emoticons werden von der Forumsoftware eigentlich in Grafiken umgesetzt?
http://www.administrator.de/index.php?faq=34

Grüße
bastla
Bitte warten ..
Mitglied: Mikefield
22.04.2009 um 19:36 Uhr
Ok, hab alles verstanden und ist auch garnicht so schwer - hinterher.

Ich habe in die Batch noch etwas Kosmetik eingebaut, zu der ich noch eine Frage habe:
Der Export liegt irgendwo im Netz und die Ausführung dauert sehr lange. Habe noch in Zeile 16 eine Prozessbar eingebaut, die aber etwas zu oft anspringt, nämlich pro Zeile, was bei knapp 1000 Zeilen etwas zu viel ist. Kann ich das jetzt so ändern, daß diese nur bei jeder 10. Zeile reagiert? Mir schwebt da was mit set Counter= usw. vor, aber gibts da nicht was eleganteres mit einer zusätzlichen for Schleife? Ein Schrittwert von -10 geht ja leider nicht.

01.
@echo off & setlocal  
02.
 
03.
:Global 
04.
set "Day=%date:~0,2%" 
05.
set "Mon=%date:~3,2%" 
06.
set "Year=%date:~6,4%" 
07.
set "Datum=%Year%%Mon%%Day% 
08.
Set "DBEx1=repemp.csv" 
09.
set "DBEx2=AIC_Export_%Datum%.xls" 
10.
If Exist %DBEx2% del %DBEx2% 
11.
 
12.
:ProcessCall 
13.
Echo Info: Erzeuge  %DBEx2% 
14.
for /F "usebackq delims=" %%A in (%DBEx1%) do ( 
15.
  call :ProcessLine1 %%A 
16.
  for /L %%p IN (1,1,1) DO ((SET /P p= .) < NUL) 
17.
18.
Echo. 
19.
Goto Sort 
20.
 
21.
:ProcessLine1 
22.
shift /3 
23.
shift /3 
24.
for /l %%B in (1 1 27) do shift /4 
25.
if %1 NEQ "FIRSTNAME" IF %4 NEQ "0" goto :EOF 
26.
echo %~2	%~1	%~3 >> %DBEx2% 
27.
goto :EOF 
28.
 
29.
:Sort 
30.
Echo Info: Sortiere %DBEx2% 
31.
sort "%DBEx2%" /o "%DBEx2%" 
32.
goto :EOF 
33.
 
mf
Bitte warten ..
Mitglied: bastla
22.04.2009 um 19:54 Uhr
Hallo Mikefield!

Ich würd's auch mit einem Zähler (und Verwendung selbiger als Schalter - erspart "delayedexpansion") machen:
01.
@echo off & setlocal  
02.
 
03.
:Global 
04.
set "Day=%date:~0,2%" 
05.
set "Mon=%date:~3,2%" 
06.
set "Year=%date:~6,4%" 
07.
set "Datum=%Year%%Mon%%Day% 
08.
Set "DBEx1=repemp.csv" 
09.
set "DBEx2=AIC_Export_%Datum%.xls" 
10.
If Exist %DBEx2% del %DBEx2% 
11.
set counter=0 
12.
 
13.
:ProcessCall 
14.
Echo Info: Erzeuge  %DBEx2% 
15.
for /F "usebackq delims=" %%A in (%DBEx1%) do ( 
16.
  call :ProcessLine1 %%A 
17.
  if not defined counter set /p p=.<nul 
18.
19.
Echo. 
20.
Goto Sort 
21.
 
22.
:ProcessLine1 
23.
shift /3 
24.
shift /3 
25.
for /l %%B in (1 1 27) do shift /4 
26.
if %1 NEQ "FIRSTNAME" IF %4 NEQ "0" goto :EOF 
27.
echo %~2	%~1	%~3 >> %DBEx2% 
28.
 
29.
set /a counter+=1 
30.
if %counter%==10 set "counter=" 
31.
goto :EOF 
32.
 
33.
:Sort 
34.
Echo Info: Sortiere %DBEx2% 
35.
sort "%DBEx2%" /o "%DBEx2%" 
36.
goto :EOF
Grüße
bastla
Bitte warten ..
Mitglied: LotPings
22.04.2009 um 20:17 Uhr
Counter geht, aber besser in in die Subroutine packen.

Die ganze shifterei ist zwar elegant aber nicht sehr effizient.
Pro Zeile werden ja sehr viele Felder eliminiert.

Der Sort Teil kann eigentlich ohne Springen direkt unter die for Schleife.

Der set /A Befehl kann auch, was nicht (gut) dokumentiert ist, mehrere math. Operationen in einem Rutsch ausführen - wenn in Anführungszeichen gesetzt auch ohne Variablen in störende Prozentzeichen zu packen.

01.
@echo off & setlocal  
02.
:Global 
03.
set "Day=%date:~0,2%" 
04.
set "Mon=%date:~3,2%" 
05.
set "Year=%date:~6,4%" 
06.
set "Datum=%Year%%Mon%%Day% 
07.
Set "DBEx1=repemp.csv" 
08.
set "DBEx2=AIC_Export_%Datum%.xls" 
09.
If Exist %DBEx2% del %DBEx2% 
10.
 
11.
Echo Info: Erzeuge  %DBEx2% 
12.
for /F "usebackq delims=" %%A in (%DBEx1%) do call :Process %%A 
13.
 
14.
Echo. 
15.
Echo %cnt% Zeilen verarbeitet, davon %cntvalid% Valide 
16.
Echo Info: Sortiere %DBEx2% 
17.
sort "%DBEx2%" /o "%DBEx2%" 
18.
goto :EOF 
19.
 
20.
:Process 
21.
set /A "cnt+=1,Rest=cnt %% 10"&if %Rest%. EQU 0. set /P X=.<NUL 
22.
shift /3 
23.
shift /3 
24.
for /l %%B in (1 1 27) do shift /4 
25.
if %1 NEQ "FIRSTNAME" IF %4 NEQ "0" goto :EOF 
26.
echo %~2	%~1	%~3 >> %DBEx2% 
27.
set /A "cntvalid+=1
Bitte warten ..
Mitglied: bastla
22.04.2009 um 20:28 Uhr
@LotPings
Der set /A Befehl kann auch, was nicht (gut) dokumentiert ist, mehrere math. Operationen in einem Rutsch ausführen - wenn in Anführungszeichen gesetzt auch ohne Variablen in störende Prozentzeichen zu packen.
... wobei (was eigentlich gar nicht dokumentiert ist ) noch nicht einmal die Anführungszeichen erforderlich sind (und auch die Leerzeichen vor und nach dem Modulo-Operator %% brauchts nicht).
Worin siehst Du übrigens den Vorteil von
%Rest%. EQU 0.
gegenüber
%Rest%==0
Grüße
bastla
Bitte warten ..
Mitglied: LotPings
22.04.2009 um 21:07 Uhr
Zitat von bastla:
... wobei (was eigentlich gar nicht dokumentiert ist ) noch nicht einmal die Anführungszeichen erforderlich sind (und auch die Leerzeichen vor und nach dem Modulo-Operator %% brauchts nicht).
Stimmt wohl, aber da ich öfter mit den binären shift Operatoren >> und << gearbeitet habe, die die Anführungszeichen haben müssen, habe ich es mir angewöhnt.

Worin siehst Du übrigens den Vorteil von
%Rest%. EQU 0. 
> 
gegenüber
%Rest%==0 
> 
Ebenfalls reine Angewohnheit/Vorliebe: Editoren mit Syntax-Highlighting heben IMO die alphabetischen Vergleichsoperatoren besser ab, der Punkt um möglichst niemals eine Variable, die leer sein könnte, allein stehen zu haben.

Gruß
LotPings
Bitte warten ..
Mitglied: Mikefield
22.04.2009 um 21:52 Uhr
Ihr mit Eurem Fachgesimpel, da soll noch einer mitkommen!
Freut mich, Euch in ein anregendes Gespräch verwickelt zu haben.

Aber könnt Ihr mir bitte diese set /a Zeile innerhalb der Kommata erklären? Kann man anstatt cnt+=1 auch cnt=+1 verwenden?
Also "cnt" und "Rest" sind in diesem Fall Variablen. Aber das Komma ist ohne Leerzeichen. Muß das so sein? Rest=cnt %% 50 was wird hier wie verarbeitet? Das folgende If vergleicht den "Rest" Parameter, aber wann wird der auf 0 (eigentlich 1) gesetzt?

mf
Bitte warten ..
Mitglied: LotPings
22.04.2009 um 22:06 Uhr
Zitat von Mikefield:
Ihr mit Eurem Fachgesimpel, da soll noch einer mitkommen!
Das kommt schon noch
Freut mich, Euch in ein anregendes Gespräch verwickelt zu haben.
Ich bin zwar erst seit einer Woche hier dabei; aber wir begegnen uns immer wieder

Aber könnt Ihr mir bitte diese set /a Zeile innerhalb der Kommata erklären? Kann man anstatt cnt+=1 auch cnt=+1 verwenden?
Das hat aber dann die normale Bedeutung eines Vorzeichens.

Also "cnt" und "Rest" sind in diesem Fall Variablen. Aber das Komma ist ohne Leerzeichen. Muß das so sein?
Das Komma trennt zwei unterschiedliche Berechnungen. Rechnen mit set /A ist immer Integer-Rechnen. Ein Dezimalkomma gibt es daher nicht.

Rest=cnt %% 50 was wird hier wie verarbeitet? Das folgende If vergleicht den "Rest" Parameter, aber wann wird der auf 0 (eigentlich 1) gesetzt?
Das ist die Modulo = Divisionsrest-Funktion

Immer wenn die Division durch 10 Rest 0 ergibt wird also ein Punkt ausgegeben.
Gruß
LotPings
Bitte warten ..
Mitglied: Mikefield
22.04.2009 um 22:14 Uhr
Ah ja, Super wie das so alles in Batch funktioniert!
Eins habe ich noch. Die Berechnung der Zeilen gibt folgendes aus:
1494 Zeilen verarbeitet, davon 1371 Valide
Aber es sind 944 zu 863 wo kommt die Fehlkalkulation zustande?

mf
Bitte warten ..
Mitglied: LotPings
22.04.2009 um 22:26 Uhr
Zitat von Mikefield:
Eins habe ich noch. Die Berechnung der Zeilen gibt folgendes aus: 1494 Zeilen verarbeitet, davon 1371 Valide
Aber es sind 944 zu 863 wo kommt die Fehlkalkulation zustande?

Die Variablen sind nicht initialisiert, setz mal testhalber
01.
set cnt=0 
02.
set cntvalid=0
Mit an den Anfang. Ansonsten sehe ich keine Fehler.
Bitte warten ..
Mitglied: Mikefield
22.04.2009 um 22:48 Uhr
Habe ich gerade gemacht, hatte die selbe Idee. Vorher aber mit Echo abgefragt: 551 und 508, jetzt klappt auch das!
Vielen Dank und angenehme Nachtruhe!

mf
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (9)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...