yakazaa
Goto Top

BATCH Computernamen auslesen, aufteilen und nach Variablen wegschreiben...

ist im Moment mein größtes Problem und ich hoffe auf eure Hilfe !! face-wink

Aber ich fang mal vorne an:

Bei uns bestehen die Rechnernamen aus diversen Kürzeln (zwischen 3 und 6 Großbuchstaben), einem Minus als Trennzeichen und dann Zahlen zwischen 1 und 100.

z.B. SVS-10

Jetzt soll mit einer BATCH Datei dieser Computername also ausgelesen werden und das "SVS" nach %Eingabe2% und die "10" nach %Eingabe4% gespeichert werden.

Wichtig ist hierbei das es in %Eingabe2% auch Großbuchstaben bleiben.
Später sollen dann diese in Kleinbuchstaben umgewandelt und nach %Eingabe3% abgelegt werden.
Allerdings muss %Eingabe2% weiterhin die Großbuchstaben behalten...

Hintergrund der ganzen Geschichte ist, dass so mit Snap Deploy beschossene Rechner automatisch diverse Windows Features geändert bekommen.
Diese Änderungen werden bei uns mit einer so genannten Client CD, einem ellenlangen DOS Skript, aufgerufen.
Dieses Skript verlangt jedoch die folgenden Eingaben:

Clientname in Großbuchstaben
Clientname in Kleinbuchstaben
Stationsnummer

Mit dem oben genannten Skript möchte ich nun gerne den Prozess des Finalisierens ohne Tastatureingaben realisieren...

Ich hoffe Ihr könnt mir da weiterhelfen !

Content-ID: 84175

Url: https://administrator.de/forum/batch-computernamen-auslesen-aufteilen-und-nach-variablen-wegschreiben-84175.html

Ausgedruckt am: 21.12.2024 um 15:12 Uhr

miniversum
miniversum 28.03.2008 um 09:51:09 Uhr
Goto Top
Versuchs mal so:
FOR /F "tokens=1,2 delims=-" %%i in ('echo %computername%') do set "Eingabe2=%%i" & set "Eingabe4=%%j"
yakazaa
yakazaa 28.03.2008 um 09:52:34 Uhr
Goto Top
Ja wie jetzt ?!

Das gesamte Dingen lässt sich mit nem Einzeiler lösen ?!

Du bist n Held !!!
miniversum
miniversum 28.03.2008 um 09:56:27 Uhr
Goto Top
Die Zerlegung ja.
Wenn du die Kleinbuchstaben willst würde z.B. sowas noch zusätzlich funktionieren:
FOR /F "tokens=2 delims=- " %%i in ('ping -n 1 %computername%^|findstr /I "%computername%"') do set "Eingabe3=%%i"
yakazaa
yakazaa 28.03.2008 um 10:07:25 Uhr
Goto Top
Hi,

hab das gerade mal versucht zu simulieren, allerdings stimmt da was mit der letzten Zeile nicht:

set Eingabe1=NEXT
FOR /F "tokens=1,2 delims=-" %%i in ('echo SVS-1') do set "Eingabe2=%%i" & set "Eingabe4=%%j"
FOR /F "tokens=2 delims=- " %%i in ('ping -n 1 SVS-1^|findstr /I "SVS-1"') do set "Eingabe3=%%i"

echo %Eingabe1%
echo %Eingabe2%
echo %Eingabe3%
echo %Eingabe4%

Er gibt für %Eingabe3% das Wort request aus....
miniversum
miniversum 28.03.2008 um 10:26:01 Uhr
Goto Top
In der CMD müßte das ganze ungefär so aussehen:
>ping SVS-1

Ping svs-1 [192.168.2.2] mit 32 Bytes Daten:

Antwort von 192.168.2.2: Bytes=32 Zeit<1ms TTL=128
Antwort von 192.168.2.2: Bytes=32 Zeit<1ms TTL=128
Antwort von 192.168.2.2: Bytes=32 Zeit<1ms TTL=128
Antwort von 192.168.2.2: Bytes=32 Zeit<1ms TTL=128

Ping-Statistik für 192.168.2.2:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms

>
Durch den Ping befehl funktioniert das ganze NUR wenn der Rechner SVS-1 erreichbar ist!

Soll es auch sonst auch immer funktionieren must du es durch ersetzen von Buchstaben lösen.
Also:
set "Eingabe3=%Eingabe2:A=a%"
set "Eingabe3=%Eingabe3:B=b%"
set "Eingabe3=%Eingabe3:C=c%"
...
yakazaa
yakazaa 28.03.2008 um 10:40:39 Uhr
Goto Top
Hm, wäre es denn dann nicht sinnvoller ipconfig zu nehmen und dann da den Computernamen raus zu ziehen ?!
DA steht er auch in Kleinbuchstaben und ist dann immer zu erreichen...

Aber wie müsste der Befehl dann aussehen ?!

Danke schonmal für deine Hilfe !
miniversum
miniversum 28.03.2008 um 11:09:53 Uhr
Goto Top
ob du ip config oder ping nimst ist egal. Wenn die Batch immer auf dem Rechner läuft mit diesem namen, also der name über %computername% übergeben werden kann, sollte es bei beiden funktionieren.
Mit ip config wäre es dann so:
FOR /F "tokens=15 delims=- " %%i in ('ipconfig /all^|findstr /I "%computername%"') do set "Eingabe3=%%i"
yakazaa
yakazaa 28.03.2008 um 11:46:37 Uhr
Goto Top
Also, hab das jetzt in mein Skript eingebunden und die daten werden richtig aus dem Computernamen herausgefiltert.

Überprüfen tu ich den Krams mit

ECHO Projektname: %Eingabe1%
ECHO Clientname (groß): %Eingabe2%
ECHO Clientname (klein): %Eingabe3%
ECHO Stationsnummer : %Eingabe4%

Leider gibt er mir da den Clientnamen (klein) auch in Großbuchstaben an...
yakazaa
yakazaa 28.03.2008 um 11:53:37 Uhr
Goto Top
Also:

Um euch mal das Gesamtskript zu zeigen:

@echo off
:start

set Eingabe1=JUNGHEINRICH
REM set /p Eingabe2=Clientname(gross):
REM set /p Eingabe3=Clientname(klein):
REM set /p Eingabe4=Clientnummer:
REM IF  "%Eingabe1%"=="" GOTO ERROR  
REM IF  "%Eingabe2%"=="" GOTO ERROR  
REM IF  "%Eingabe3%"=="" GOTO ERROR  
REM IF  "%Eingabe4%"=="" GOTO ERROR  

FOR /F "tokens=1,2 delims=-" %%i in ('echo %computername%') do set "Eingabe2=%%i" & set "Eingabe4=%%j"  
FOR /F "tokens=15 delims=- " %%i in ('ipconfig /all^|findstr /I "%computername%"') do set "Eingabe3=%%i"  

ECHO.
ECHO.
ECHO Folgende Rechnerinfos werden für die Ausführung der Client CD verwendet:
ECHO.
ECHO.
ECHO Projektname: %Eingabe1%
ECHO.
ECHO Clientname (groß): %Eingabe2%
ECHO.
ECHO Clientname (klein): %Eingabe3%
ECHO.
ECHO Stationsnummer: %Eingabe4%
ECHO.
ECHO.
ECHO Sollten diese Eingaben nicht korrekt sein drücken Sie bitte JETZT STRG + C um das Skript abzubrechen !!!
PAUSE
CLS
rem ###################### DISKPART nach C:\SW kopieren ###########
net use X: \\VI-CDS-SRV\Basics gambit /user:Administrator
copy X:\*.txt C:\SW\
copy X:\*.exe C:\SW\
net use X: /delete

rem ###################### SIW nach C:\SW kopieren ###########
MD C:\SW\SIW
net use X: \\VI-CDS-SRV\Files\SIW gambit /user:Administrator
copy X:\*.* C:\SW\SIW\
net use X: /delete

rem ###################### CD-ROM nach Y: mappen ###########
C:\SW\diskpart /s C:\SW\disk_Y.txt

rem ###################### Client CD ###########
net use Z: \\VI-CDS-SRV\CLIENT_CD\%Eingabe1% gambit /user:Administrator
CALL Z:\inst.bat %Eingabe1% %Eingabe2% %Eingabe3% %Eingabe4%
net use Z: /delete

REM ###################### ORACLE Sprachänderung ###########
net USE Z: \\srv.jag-test.ocal\Files gambit /user:jag-test.ocal\Administrator
CALL Z:\JAG-Master\ORACLE.CMD
net use Z: /delete

rem ###################### CD-ROM nach Z: mappen ###########
C:\SW\diskpart /s C:\SW\disk_Z.txt

rem ###################### static IP setting und MAC Adressen Ausgabe#############################################
SET COMPUTERNAME=%Eingabe2%-%Eingabe4%
copy C:\Windows\system32\drivers\etc\hosts c:\SW\hosts.txt
SET LOG=\\VI-CDS-SRV\MAC\%Eingabe1%\%COMPUTERNAME%.txt
ECHO Daten des Rechners %COMPUTERNAME% >>%LOG%
ipconfig /all >>%LOG%
ECHO. >>%LOG%
FOR /F "" %%I in ('findstr /i "%COMPUTERNAME%$" C:\SW\hosts.txt') DO Set IP=%%I  
ECHO NEXT Netzwerk: >>%LOG%
ECHO         IP Adresse      . . . . . . . . . : %IP%  >>%LOG%
ECHO.>>%LOG%
DEL c:\SW\hosts.txt

rem ###################### LAN Verbindung umbenennen #############################################
netsh interface set interface name = "Hostlan" newname = "HOSTLAN"  
netsh interface ip set address "HOSTLAN" static %IP% 255.255.255.0 172.27.72.254 1  

rem ###################### Software Inventarisierung ###############################
CALL C:\SW\SIW\SIW.EXE /log

rem ###################### Verknüpfung löschen ##############
REM DEL "C:\Documents and Settings\Administrator\Desktop\Rechner individualisieren.lnk"  
goto Ende

rem ###################### Fehlerfall ##############
:ERROR
REM ECHO.
REM ECHO.
REM ECHO Uebergabeparameter fehlt !!
REM ECHO.
REM ECHO Syntax: INST Projektname(gross) Clientname(gross) Clientname(klein) Client-Nr.
REM ECHO.
ECHO Fehlerfall: 
ECHO.
ECHO Zur Fehlersuche bitte folgendes angeben:
ECHO.
ECHO Parameter:
ECHO.
ECHO Projektname: %Eingabe1%
ECHO.
ECHO Clientname (groß): %Eingabe2%
ECHO.
ECHO Clientname (klein): %Eingabe3%
ECHO.
ECHO Stationsnummer: %Eingabe4%
ECHO.
PAUSE
goto start
:ende

Vielleicht hebelt sich da irgendwas gegenseitig aus ?!

bedankt,

Dominink
miniversum
miniversum 28.03.2008 um 12:22:14 Uhr
Goto Top
Ich habe grade dein Skript (nur die Obere hälfte bis zur Pause) bei mir grade genau so getestet. Da mein Computername hier auch ein - enthält und alles grosbuchstaben sind war also keine weitere Änderung notwendig.
Hier bei mir funktioniert es wie gewollt. Da wos großbuchstaben sein sollen sind sie groß udn da wo sie klein sein sollen werden sie klein angezeigt.

Ich hab hier ein Windows xp pro.

Hast du es mal mit der ersetzen Mathode versucht?
bastla
bastla 28.03.2008 um 14:38:20 Uhr
Goto Top
Hallo yakayzaa!

Falls (temporäres) VBScript eine Option wäre, könntest Du es mit folgendem Batch versuchen:
@echo off & setlocal
set G=%temp%\GetNameParts.vbs
echo N=Split(WScript.CreateObject("WScript.Network").ComputerName,"-"):WScript.Echo N(0)^&" "^&LCase(N(0))^&" "^&N(1)>%G%  
for /f "tokens=1-3" %%i in ('cscript //nologo %G%') do set "Eingabe2=%%i" & set "Eingabe3=%%j" & "set Eingabe4=%%k"  
echo %Eingabe2%
echo %Eingabe3%
echo %Eingabe4%

Grüße
bastla
yakazaa
yakazaa 28.03.2008 um 15:24:36 Uhr
Goto Top
So, muss vorne anfangen:

Hab das Problem schon kommen sehen und das Ganze mal bei Gulli gepostet.

Aus der Antwort von da ahb ich mir dann irgendwann ein Konstrukt gebaut, das wie folgt aussieht.. und seinen Dienst tut ;)

Sieht so aus:

FOR /F "tokens=1,2 delims=-" %%i in ('echo %computername%') do set "Eingabe2=%%i" & set "Eingabe4=%%j"  
FOR /F "tokens=15 delims=- " %%i in ('ipconfig /all^|findstr /I "%computername%"') do set "Eingabe3=%%i"  

set Eingabe3=%Eingabe3:A=a%
set Eingabe3=%Eingabe3:B=b%
set Eingabe3=%Eingabe3:C=c%
set Eingabe3=%Eingabe3:D=d%
set Eingabe3=%Eingabe3:E=e%
set Eingabe3=%Eingabe3:F=f%
set Eingabe3=%Eingabe3:G=g%
set Eingabe3=%Eingabe3:H=h%
set Eingabe3=%Eingabe3:I=i%
set Eingabe3=%Eingabe3:J=j%
set Eingabe3=%Eingabe3:K=k%
set Eingabe3=%Eingabe3:L=l%
set Eingabe3=%Eingabe3:M=m%
set Eingabe3=%Eingabe3:N=n%
set Eingabe3=%Eingabe3:O=o%
set Eingabe3=%Eingabe3:P=p%
set Eingabe3=%Eingabe3:Q=q%
set Eingabe3=%Eingabe3:R=r%
set Eingabe3=%Eingabe3:S=s%
set Eingabe3=%Eingabe3:T=t%
set Eingabe3=%Eingabe3:U=u%
set Eingabe3=%Eingabe3:V=v%
set Eingabe3=%Eingabe3:W=w%
set Eingabe3=%Eingabe3:X=x%
set Eingabe3=%Eingabe3:Y=y%
set Eingabe3=%Eingabe3:Z=z%

ECHO.
ECHO.
ECHO Folgende Rechnerinfos werden fr die Ausfhrung der Client CD verwendet:
ECHO.
ECHO Projektname: %Eingabe1%
ECHO Clientname (groá): %Eingabe2%
ECHO Clientname (klein): %Eingabe3%
ECHO Stationsnummer: %Eingabe4%
ECHO.
ECHO.
ECHO Sollten diese Eingaben nicht korrekt sein drcken Sie bitte JETZT
ECHO STRG + C um das Skript abzubrechen !!!
ECHO.
ECHO.
PAUSE
CLS

So klappt das Ganze dann auch Perfekt...

Vielen Dank für euren Support, speziell natürlich an dich miniversum !
Das Hauptthreadpronlem hattest du ja in 0,nix gelöst !!!

@bastla: ein VB Script soll ich (warum auch immer) nicht verwenden...
Anweisungen...


Schönes Wochenende euch allen und nochmals 1000 Dank !!!

Dominik
miniversum
miniversum 28.03.2008 um 15:40:55 Uhr
Goto Top
Dann brauchst du die zweite Zeile mit dem For aber nicht mehr und köntest davür
set Eingabe3=%Eingabe3:A=a%
in
set Eingabe3=%Eingabe2:A=a%
abändern.
Die restlichen aber so lassen.