13stift37
Goto Top

Erklärung von DOS Kommandos

Hallöchen face-smile

Ich habe aus einem anderen Tread hier aus dem Forum eine funktionierende Batch Datei für meine Zwecke gefunden und so bearbeitet, wie es mir mit meinem Wissen möglich war. Nun möchte ich aber gerne verstehen was dort eigentlich getan wird. Ich bin in der Programierer Welt noch ziemlich neu und habe früher nur in C Programmiert (Grundkenntnisse). Somit sind mir einige Befehle schon bekannt. Jedoch nicht alle. Mit der help funktion in der cmd habe ich ebenfalls keine Erleuchtung gefunden °~°
Hier ist einmal der Inhalt der Batch Datei:
@echo off & setlocal enabledelayedexpansion
del C:\pcliste.txt 2>&1>nul
del C:\tvids.txt 2>&1>nul
for /L %%A in (0,1,254) do (
for /F "tokens=3 delims= " %%B in ('tracert -h 1 -w 100 192.168.101.%%A ^| find "Routenverfolgung"') do @echo %%B >> c:\pcliste.txt )  

For /F %%a in (c:\pcliste.txt) do (

FOR /F "skip=2 tokens=2*" %%i IN ('reg query "\\%%a\HKEY_LOCAL_MACHINE\Software\Wow6432Node\Teamviewer\Version4" /V "ClientID"') do (set /a "LAD=%%j" set /a "LAD=%%j" & @echo %%a !LAD! >> c:\tvids.txt)  
)

type C:\tvids.txt
pause

Wäre Super wenn Ihr mir Zeile 4 - 9 erklären könntet face-smile

Mit freundlichen Grüßen.

Content-ID: 253130

Url: https://administrator.de/contentid/253130

Ausgedruckt am: 25.11.2024 um 02:11 Uhr

ITvortex
Lösung ITvortex 27.10.2014 aktualisiert um 11:22:43 Uhr
Goto Top
Morgen,

hier findest du ein schöne Tutorial: Tutorial zur FOR-Schleife

Liebe Grüße
ITvortex.

PS: Falls dann noch erklärungsbedarf ist bescheid geben face-smile
13Stift37
13Stift37 27.10.2014 um 11:24:16 Uhr
Goto Top
Hey vielen Dank dafür! face-smile
Somit sind Zeile 5-7 schonmal verständlicher! face-smile

Allerdings habe ich Zeile 9 immer noch nicht verstanden. Was wird bei
do (set /a "LAD=%%j" set /a "LAD=%%j" & @echo %%a !LAD! >> c:\tvids.txt)  
genau getan?
ITvortex
ITvortex 27.10.2014 aktualisiert um 11:44:44 Uhr
Goto Top
cmd:

set /?



Die /A-Option gibt an, dass die Zeichenfolge rechts vom Gleichheitszeichen
ein numerischer Ausdruck ist, der ausgewertet wird. Das Auswertungsprogramm
des Ausdrucks unterstützt dabei die folgenden Vorgänge, entsprechend ihrer
Anordnung mit abnehmendem Vorrang:


    ()                  - Gruppierung
    ! ~ -               - monäre Operatoren
    * / %              - arithmetische Operatoren
    + -                 - arithmetische Operatoren
    << >>               - logische Verschiebung
    &                   - bitweise UND
    ^                   - bitweise exklusives ODER
    |                   - bitweise ODER
    = *= /= %= += -=    - Zuordnung
    ,                   - Trennzeichen für Ausdrücke

Wenn Sie einen der arithmetischen oder Moduloperatoren verwenden, müssen
Sie die Zeichenfolge für den Ausdruck in Anführungszeichen setzen. Alle
nicht-numerischen Zeichenfolgen im Ausdruck werden als Zeichenfolgen von
Umgebungsvariablen behandelt, deren Werte vor der Verwendung in Zahlen
konvertiert werden. Wenn eine Umgebungsvariable angegeben wird, die nicht
definiert ist, wird für diese der Wert Null verwendet. Somit können Sie
mit Umgebungsvariablen Berechnungen vornehmen, ohne %-Zeichen einzugeben,
um deren Werte zu erhalten. Wenn der Befehl SET /A von der Befehlszeile,
d.h. außerhalb eines Befehlsskripts ausgeführt wird, dann zeigt er
den endgültigen Wert des Ausdrucks an. Der Zuordnungsoperator erfordert
eine Umgebungsvariable auf der linken Seite des Operators. Numerische Werte
stellen immer Dezimalzahlen dar, es sei denn, sie haben ein Präfix 0x für
hexadezimale Zahlen, 0b für binäre Zahlen oder 0 für oktale Zahlen. Damit
stellt 0x12 dieselbe Zahl wie 18 oder 022 dar. Beachten Sie, dass die oktale
Schreibweise verwirrend sein kann: So sind 08 und 09 keine gültigen Zahlen,
da 8 und 9 keine erlaubten oktalen Ziffern sind.

Liebe Grüße
ITvortex
13Stift37
13Stift37 27.10.2014 aktualisiert um 12:01:36 Uhr
Goto Top
set /a "LAD=%%j" set /a "LAD=%%j"  
Was bedeutet denn LAD und wieso wird 2 mal die Variable &&j gesetzt? In der .txt datei später steht an dieser stelle nur der Computer Name und der Domänen Name.
@echo %%a !LAD! >> c:\tvids.txt
Und was hat hier das !LAD! wieder zu bedeuten?

Ich bin leicht verwirrt °~°

Ausgabe in der tvids.txt ist:
Test-PC-1.test.netz 123456789 
(123456789 == TeamviewerID)
miniversum
miniversum 27.10.2014 um 12:29:33 Uhr
Goto Top
Hallo,

das macht für mich so auch keinen Sinn und (ungetestet) würde ich fast behaubten das Du da auch eine Fehlermeldung sehen müstest.
set /a "LAD=%%j" set /a "LAD=%%j"
ist einfach nur doppelt und du kannst das erste weglassen.
Was hier passiert wäre dann ein speichern des entsprechenden Registryeintrags in der Variabeln %%j.
Dann wird durch:
set /a "LAD=%%j" & @echo %%a !LAD! >> c:\tvids.txt
der Eintrag %%J in LAD hinterlegt.
di eVariable LAD kanns tdu dann normalerweise mit %LAD% abrufen. Dies funktioniert allerdings nicht innerhalb einer Schleife. Daher wurde hier in Zeile 1 setlocal enabledelayedexpansion ausgeführt wodurch dies dann mmöglich wird. Dafür musst Du dann allerdings nicht %LAD% sondern !LAD! benutzen.
Das Echo gibt dann also den jeweiligen eintrag aus pcliste.txt zusammen mit dem zugehörigen registry Eintrag LAD aus.
Da LAD anschließend nicht mehr vernwendet wird kannst du dir das Ganze mit !LAD! aber auch spaaren und direkt %%J benutzen. Das würde dann so ausehen:
FOR /F "skip=2 tokens=2*" %%i IN ('reg query "\\%%a\HKEY_LOCAL_MACHINE\Software\Wow6432Node\Teamviewer\Version4" /V "ClientID"') do (echo %%a %%J >> c:\tvids.txt)
13Stift37
13Stift37 27.10.2014 aktualisiert um 12:46:56 Uhr
Goto Top
Hallo miniversum!

Danke für diese Logische erklärung face-smile
Ich habe einmal deinen Code ausprobiert, nun bekomme ich allerdings die TeamViwer ID nicht mehr angezeit. Nun steht dort:
Test-PC-1.test.netz 0x36c74755
Was hat das zu bedeuten? :D

//Edit:

Ich habe es nun so gemacht:
set /a "LAD=%%j" & echo %%a !LAD! >> c:\tvids.txt  
Und er zeigt mir die richtige ID wieder an.
Du hattest mit dem doppelt abfragen recht, war nicht nötig. Und das mit dem LAD ist mir nun auch einigermaßen klar.

Ich markiere dies nun als gelöst, da ich den Code nun verstanden habe.

Vielen Dank für eure Hilfe! face-smile
miniversum
miniversum 28.10.2014 um 12:54:52 Uhr
Goto Top
Hallo,

ok dann ist mir klar warum der Umweg über set. ich behaubte mal ganz frech das 0x36c74755 einfach nur der Hexwert der ID ist.
Da ist kein TeamViewer verwende kann ich es auch nicht hier testen.

Gruß