WinFuture-Forum.de: Variable nicht definiert, was dann - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Variable nicht definiert, was dann


#1 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 28. Mai 2020 - 19:41

Hallo allerseits, ich tüftel seit Tagen jetzt an einem Problem, von dem ich gar nicht dachte, dass es zu einem werden könnte. Ich habe ein Skript in dem unsere Rechner registrietrt werden sollen. Es liegt ein Verzeichnis vor in dem für jeden PC eine TXT Datei existiert, in dem für jeden PC die entsprechenden Lizenzen für Win10 pro und Enterprise angegeben sind und mit der Batch ausgelesen werden. Steht dann in etws so da:

Win10 Prof aaaaa-bbbbb-ccccc-ddddd-eeeee
Win10 Ent fffff-ggggg-hhhhh-iiiii-jjjjj

nun funktioniert das leider nur wenn beide Lizenzen drin stehen. Sobald nur eine drin steht, und diese gesucht wird, soll an die Auswahl zurückgesprungen werden, dann ist ja die entsprechende Variable nicht definiert. Wie würdet Ihr das Lösen, mein Teilskript siht so aus:

@ECHO off
SETLOCAL
CD /D %~dp0

:ABFRAGE

SET /p pcname=PC Name: 
ECHO Welche Version soll lizensiert werden?
ECHO -------------------------------------------------
ECHO [1] Win Ent  [2] Win pro (1/2)
ECHO -------------------------------------------------
choice /c 12 /M "Ihre Antwort" /N
IF errorlevel 1 SET BS=Win10En
IF errorlevel 2 SET BS=Win10Pro
ECHO %BS%
ECHO %BS% > %~dp0\tmp\BS.txt
ECHO.
PAUSE
CLS

ECHO %BS%

ECHO Zusammenfassung
ECHO ............................
ECHO Sie haben folgendes gewaehlt:
ECHO PC-Name: %pcname%
ECHO Betiebssystem: %bs%

ECHO -------------------------------------------------
ECHO Alles korrekt? (j/n)
ECHO -------------------------------------------------
ECHO.
choice /c jn /M "Ihre Antwort" /N
IF errorlevel 2 goto Abfrage
ECHO.
CLS

:REGISTRIERUNG

ECHO %BS%
::PCname aus pcname.txt holen

cd c:\>nul 2>&1
cd c:\LIZ>nul 2>&1

FOR /F "tokens=*" %%g IN ('findstr /S /M /C:"%pcname%" *') DO (SET "dat=%%g")

IF %BS%==Win10En (FOR /F "tokens=4" %%i IN ('findstr /C:"Win10 Ent" %dat%') DO (SET "dat2=%%i"))
IF %bs%==Win10Pro (FOR /F "tokens=4" %%i IN ('findstr /C:"Win10 Prof" %dat%') DO (SET "dat2=%%i")) 


pause
) ELSE (

echo bla
pause
)



ECHO Seriennummer gefunden: %dat2%
ECHO.
ECHO Lizenzdatei: %dat%
ECHO Lizenzdatei wird verknuepft
ECHO.
pause
EXIT




vielen dank schon mal


lg

Dieser Beitrag wurde von stefan4711 bearbeitet: 28. Mai 2020 - 19:42

0

Anzeige



#2 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 28. Mai 2020 - 20:06

Warum müssen 2 Lizenznummern drin stehen? Pro PC reicht doch eine Lizenznummer aus oder nicht?

Dieser Beitrag wurde von Gispelmob bearbeitet: 28. Mai 2020 - 20:07

AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#3 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 28. Mai 2020 - 20:48

die gehen halt mir Pro und Enterprise, die Suche geht ja auch, aber eben nur wenn beide drin stehen, ich denke ich benötige so etwas wie not defined oder so, wenn es sowas geben soltle.
0

#4 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 29. Mai 2020 - 06:51

 Zitat (stefan4711: 28. Mai 2020 - 20:48)

die gehen halt mir Pro und Enterprise

?

Weitere Fragen:

Um wieviele PC handelt es sich?
Muss sich der Rechnername ändern oder bleibt er gleich?
Werden die Lizenzen immer den selben PCs zugeordnet oder wird gewechselt?

Dieser Beitrag wurde von Gispelmob bearbeitet: 29. Mai 2020 - 10:03

AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#5 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 29. Mai 2020 - 08:18

Der Rechnername bleibt der gleiche, für jeden gibt es eine Textdatei, in manchen Fällen kann es halt notwendig sein das entsprechend andere OS zu nehmen, damit hab ich nichts zu tun, die Frage ist hier einfach nur, wie kann ich eine entsprechende Fehlerabfangung realisieren, sofern eine Option getroffen wird, wo er nichts findet. Sicherlich gibt es da bessere Ideen, aber die Frage würde mich rein batchtechnisch auch interessieren, hätte niwe gedacht dass es damit Probleme geben könne bei findstr. Mein Versuch sieht momentan so aus, aber das ist es leider noch nicht.


@ECHO off
SETLOCAL
CD /D %~dp0

:ABFRAGE

SET /p pcname=PC Name: 
:BSA
ECHO Welche Version soll lizensiert werden?
ECHO -------------------------------------------------
ECHO [1] Win Ent  [2] Win pro (1/2)
ECHO -------------------------------------------------
choice /c 12 /M "Ihre Antwort" /N
IF errorlevel 1 SET BS=Win10En
IF errorlevel 2 SET BS=Win10Pro
ECHO %BS%
ECHO %BS% > %~dp0\tmp\BS.txt
ECHO.
CLS

ECHO %BS%

ECHO Zusammenfassung
ECHO ............................
ECHO Sie haben folgendes gewaehlt:
ECHO PC-Name: %pcname%
ECHO Betiebssystem: %bs%

ECHO -------------------------------------------------
ECHO Alles korrekt? (j/n)
ECHO -------------------------------------------------
ECHO.
choice /c jn /M "Ihre Antwort" /N
IF errorlevel 2 goto Abfrage
ECHO.
CLS

:REGISTRIERUNG

ECHO %BS%
::PCname aus pcname.txt holen

cd c:\>nul 2>&1
cd c:\LIZ>nul 2>&1

FOR /F "tokens=*" %%g IN ('findstr /S /M /C:"%pcname%" *') DO (SET "dat=%%g")

IF %BS%==Win10En (FOR /F "tokens=4" %%i IN ('findstr /C:"Win10 Ent" %dat%') DO (SET "dat2=%%i"))
IF %bs%==Win10Pro (FOR /F "tokens=4" %%i IN ('findstr /C:"Win10 Prof" %dat%') DO (SET "dat2=%%i")) 



) ELSE (

echo bla

)

IF "%dat2%" equ "" (ECHO "Fuer das gewähle OS existiert kein Key" && goto BSA
) ELSE ( 
goto sf
)

:sf

ECHO Seriennummer gefunden: %dat2%
ECHO.
ECHO Lizenzdatei: %dat%
ECHO Lizenzdatei wird verknuepft
ECHO.
pause
EXIT








Lg und frohe Pfingsten

PS Wir haben einige 100 Rechner, ansonsten wär ich auch nicht auf die Idee gekommen für die NEueinrichung ein Script zu schreiben, dies ist auch nur ein kleiner Teil, um das ganze nicht zu verkomplizieren

Dieser Beitrag wurde von stefan4711 bearbeitet: 29. Mai 2020 - 08:21

0

#6 Mitglied ist offline   Gispelmob 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.591
  • Beigetreten: 14. August 15
  • Reputation: 392

geschrieben 29. Mai 2020 - 10:07

Wenn es pro PC immer nur eine fest definierte Lizenz gibt, braucht man eigentlich immer nur eine Datei pro PC in der die entsprechende Lizenz steht und die den fest definierten Namen trägt, den der PC im Netzwerk haben soll. Der Script müsste dann nur automatisch die Lizenz und den Dateinnamen lesen und entsprechend verwenden.

Wenn aber jeder Nutzer der PC die Auswahl selbst treffen soll, dann müsste auch noch eine Rechteabfrage rein, denn sonst wird im Zweifelsfall jeder einfach die höchste Lizenz nehmen oder irgendeine ohne nachzudenken.

Was deinen Script angeht, so kannst du eine bestimmte Lizenz als Standard setzen und erst wenn eine Auswahl getroffen wird auf eine andere wechseln.

Aber wie geschriebem versteht ich den Aufwand nicht ganz wenn der Rechnername und eventuell die Lizenz immer gleich sind.
AMD Ryzen 9 5950X, Asus ROG Strix X570-F Gaming, 32GB Corsair DDR4-3200, Asus Geforce GTX 3060 12GB, Creative Sound Blaster AE-7, 240GB SSD, 500GB SSD, 3x 1TB SSD, Win11 Home, 4x Acer G246HL Bbid, Logitech MX518 Gaming Mouse, Logitech G440 Mousepad, Logitech K120 Keyboard, Razer Tiamat 7.1 V2 Headset, Creative Inspire 5.1 5300 Soundsystem
0

#7 Mitglied ist offline   Shannon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 131
  • Beigetreten: 12. Februar 13
  • Reputation: 11
  • Geschlecht:unbekannt

geschrieben 29. Mai 2020 - 10:27


if DEFINED dat2 (
   echo +++++++++ %dat2% +++ gefunden
) else (
   echo --------- %dat2% --- leer
)




g.s.
0

#8 Mitglied ist offline   stefan4711 

  • Gruppe: aktive Mitglieder
  • Beiträge: 41
  • Beigetreten: 22. April 20
  • Reputation: 0

geschrieben 29. Mai 2020 - 13:08

cool, danke hat funktioniert, dann lag es bei mir eben doch am fehlenden ELSE, dachte dass könnte ich mir sparen, wenn es nur ein IF ist

lg und frohe Pfingsten

Dieser Beitrag wurde von stefan4711 bearbeitet: 29. Mai 2020 - 13:09

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0