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

Variabelinhalt wiederum als Variabel verwenden.

Frage Entwicklung Batch & Shell

Mitglied: Apop85

Apop85 (Level 1) - Jetzt verbinden

14.04.2013 um 10:06 Uhr, 1651 Aufrufe, 13 Kommentare

Versuche gerade einen kleinen Batch zu Scripten welche eine Eingabe mit einem bestimmten Muster Codiert. Nun möchte ich nur ungern für jede Variable eine eigene überprüfung durchzuführen.

Ich versuch grad ein Script zu erstellen welches Eingaben nach einem Bestimmten Muster Codiert. Nun möchte ich nicht unbedingt, dass ich jede Variable einzeln Prüfen muss sonder würde gerne eine Variabel in einer Variabel verwenden.

01.
rem zuerst 
02.
if %counter% LSS 8 set bs=%%%var%%counter%%% else set bs=%var%%pwcounter% 
03.
rem danach 
04.
if %bs% == 1 set bs=z 
Nur schaff ichs irgendwie nicht dass er die ausgabe als Variabel versteht und nicht als Textausgabe.

Im obigen Beispiel erhalte ich dann die Ausgabe < bs=%b1% > also die ausgabe mit den % funktioniert aber bei der Prüfung (Zeile 4) überprüft er dann auch genau dies < if %b1% = 1 set bs=z > und das kann er natürlich nicht interpretieren und endet in einem Syntaxfehler.

Wäre froh wenn mir da jemand helfen könnte.

Gruss

Apop
Mitglied: colinardo
14.04.2013, aktualisiert um 10:25 Uhr
Hi Apop,
dazu benutze die doppelte Expansion der Shell (http://stackoverflow.com/questions/1199931/how-expand-a-cmd-shell-varia ...)

schreibe dazu Zeile 02 so:
if %counter% LSS 8 set bs=!%var%%counter%! else set bs=%var%%pwcounter%
und in in den Kopf deines Scripts muss noch ein:
setlocal ENABLEDELAYEDEXPANSION
Grüße Uwe
Bitte warten ..
Mitglied: bastla
14.04.2013, aktualisiert um 16:54 Uhr
Hallo Apop85 und colinardo!

Das würde besser etwa so
if %counter% LSS 8 (set bs=!%var%%counter%!) else (set bs=!%var%%pwcounter%!)
aussehen, "delayedExpansion" lässt sich aber auch vermeiden:
if %counter% LSS 8 (call set "bs=%%%var%%counter%%%") else (call set "bs=%%%var%%pwcounter%%%")
Grüße
bastla

[Edit] Anpassung, damit %var% (und nicht "var") als Betandteil des Variablennamens verwendet wird [/Edit]
Bitte warten ..
Mitglied: Apop85
14.04.2013, aktualisiert um 12:39 Uhr
Cool Danke viel mals. Bevor ich jetzt noch einen Thread öffne wegen meinem Cryp-Script wollte ich noch was Fragen...

Dieses Argument: %variable:~0,1% wie ist hier was Definiert. Ich versuche eine 8-Stellige Eingabe in ihre Einzelteile zu zerlegen jedoch bring ich es einfach nicht fertig.... jedes mal wenn ich denke AHAAAA jetzt weis ich wie dieses Argument sich verhält knallt es mir wieder die Latte vor den Kopf...

01.
set "b1=%name:~0,1%" & set "p1=%pass:~0,1%" 
02.
set "b2=%name:~1,1%" & set "p2=%pass:~1,1%" 
03.
set "b3=%name:~2,2%" & set "p3=%pass:~1,2%" 
04.
set "b4=%name:~2,2%" & set "p4=%pass:~2,2%" 
05.
set "b5=%name:~2,3%" & set "p5=%pass:~2,3%" 
06.
set "b6=%name:~3,3%" & set "p6=%pass:~3,3%" 
07.
set "b7=%name:~6,6%" & set "p7=%pass:~6,6%" 
08.
set "b8=%name:~7,8%" & set "p8=%pass:~7,8%"
Wer dieses Argument kennt, weiss wohl dass bei obiger Schreibweise nach der Eingabe 12345678 nicht 1, 2, 3, 4, 5, 6, 7, 8 raus kommt...
Im Moment Spuckt er folgendes aus:
%name% : 1, 2, 34, 34, 345, 456, 78, 8
%pass% : 1, 2, 23, 34, 345, 456, 78, 8
aber wie schaff ich das? bzw. Wie definiert sich dieses Argument?

grüsse Apop
Bitte warten ..
Mitglied: rubberman
14.04.2013 um 12:50 Uhr
Hallo Apop85,

die Erklärung findest du in der Hilfe zu SET.
Was du vermutlich tun möchtest:
%variable:~0,1% nach dem 0. Zeichen (also dem Anfang) 1 Zeichen extrahieren.
%variable:~1,1% nach dem 1. Zeichen 1 Zeichen extrahieren.
%variable:~2,1% nach dem 2. Zeichen 1 Zeichen extrahieren.
etc.

Grüße
rubberman
Bitte warten ..
Mitglied: Apop85
14.04.2013 um 12:57 Uhr
AAAHHHHHHHHHHHH!!!!! Endlich!!
Jetzt ist alles Klar... Klar kam nie das raus was ich wollte XD
ich habs bisher immer als x zeichen weglassen und stelle y zeigen interpretiert o.ä. XD

Danke Danke Danke und Danke auf Knien XD

Lg

Apop
Bitte warten ..
Mitglied: Apop85
14.04.2013, aktualisiert um 13:38 Uhr
Habs jetzt versucht einzubauen aber es will noch nicht recht.

01.
if %counter% LSS 8 ( set "var=b" ) else ( set "var=p" ) 
02.
if %counter% LSS 8 ( set /a counter=%counter%+1 ) else ( set /a pwcounter=%pwcounter%+1 ) 
03.
if %pwcounter% == 8 goto END 
04.
if %counter% LSS 8 (set bs=!var%counter%!) else (set bs=!var%pwcounter%!) 
05.
 
06.
echo %counter%-%pwcounter% - %bs% 
07.
echo -%b1%-%b2%-%b3%-%b4%-%b5%-%b6%-%b7%-%b8%- 
08.
echo -%p1%-%p2%-%p3%-%p4%-%p5%-%p6%-%p7%-%p8%- 
09.
 
10.
if "%bs%" == / set "bs=z" & goto CRYPT1 
11.
if "%bs%" == "0" set "bs=r" & goto CRYPT1 
12.
if "%bs%" == "9" set "bs=m" & goto CRYPT1 
13.
...
Als ausgabe für %bs% erhalte ich aber jedesmal NUL, heisst das echo zeigt bei der Variable nichts an... Demnach ändert er auch keine Buchstaben so wie in den letzten Zeilen gedacht...

setlocal ENABLEDELAYEDEXPANSION habe ich auch gesetzt. Habe auch die Variante probiert von @bastla ohne setlocal ENAB... kam aber das selbe dabei raus...

Grüsse

P.S.
@rubberman
Endlich klappt das so wie ich will ^^
Bitte warten ..
Mitglied: rubberman
14.04.2013 um 13:54 Uhr
Hallo Apop85,

kannst du das mal im ganzen Batch posten. Ich weiß nicht mal welchen Wert du in welcher Variablen erwartest.
In Zeile 10 fehlen die Anführungszeichen um den Slash. Das kann's aber kaum gewesen sein ...

Grüße
rubberman
Bitte warten ..
Mitglied: bastla
14.04.2013 um 14:02 Uhr
Hallo Apop85!
Als ausgabe für %bs% erhalte ich aber jedesmal NUL, heisst das echo zeigt bei der Variable nichts an...
Dann ist der gezeigte Code-Teil vermutlich selbst auch noch innerhalb einer "geklammerten" Struktur - falls ja (und da Du bereits "delayedExpansion" aktiviert hast), könntest Du anstelle von %bs% einfach !bs! verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: Apop85
14.04.2013, aktualisiert 15.04.2013
Hier der Code:
01.
rem Passwortverschlüsselung 
02.
:START 
03.
 
04.
@echo off 
05.
setlocal ENABLEDELAYEDEXPANSION 
06.
cls 
07.
echo. 
08.
echo. 
09.
echo. 
10.
echo. 
11.
echo. 
12.
echo   Bitte gib den Benutzernamen an (Max. 8 Zeichen) 
13.
set /p name= 
14.
echo. 
15.
echo   Bitte gib das gewünschte Passwort an. 
16.
set /p pass= 
17.
 
18.
set globalcount=0 
19.
goto REORG 
20.
 
21.
:REORG 
22.
set counter=0 
23.
set pwcounter=0 
24.
if %globalcount% == 20 goto END 
25.
set /a globalcount=%globalcount%+1 
26.
rem Benutzername und Passwort in Einzelteile zerlegen 
27.
set "b1=%name:~0,1%" & set "p1=%pass:~0,1%" 
28.
set "b2=%name:~1,1%" & set "p2=%pass:~1,1%" 
29.
set "b3=%name:~2,1%" & set "p3=%pass:~2,1%" 
30.
set "b4=%name:~3,1%" & set "p4=%pass:~3,1%" 
31.
set "b5=%name:~4,1%" & set "p5=%pass:~4,1%" 
32.
set "b6=%name:~5,1%" & set "p6=%pass:~5,1%" 
33.
set "b7=%name:~6,1%" & set "p7=%pass:~6,1%" 
34.
set "b8=%name:~7,1%" & set "p8=%pass:~7,1%" 
35.
 
36.
rem NUL eingaben entfernen 
37.
if "%b1%" == "" set "b1=/" 
38.
if "%b2%" == "" set "b2=/" 
39.
if "%b3%" == "" set "b3=/" 
40.
if "%b4%" == "" set "b4=/" 
41.
if "%b5%" == "" set "b5=/" 
42.
if "%b6%" == "" set "b6=/" 
43.
if "%b7%" == "" set "b7=/" 
44.
if "%b8%" == "" set "b8=/" 
45.
if "%p1%" == "" set "p1=/" 
46.
if "%p2%" == "" set "p2=/" 
47.
if "%p3%" == "" set "p3=/" 
48.
if "%p4%" == "" set "p4=/" 
49.
if "%p5%" == "" set "p5=/" 
50.
if "%p6%" == "" set "p6=/" 
51.
if "%p7%" == "" set "p7=/" 
52.
if "%p8%" == "" set "p8=/" 
53.
 
54.
rem Benutzername und Passwort neu zusammensetzen und nochmals mischen 
55.
set "name=%p7%%b4%%p2%%b8%%b6%%p1%%p8%%b1%" 
56.
set "pass=%p6%%b5%%p4%%p3%%b7%%b2%%b2%%p5%" 
57.
 
58.
set "b2=%name:~0,1%" & set "p3=%pass:~0,1%" 
59.
set "b5=%name:~1,1%" & set "p6=%pass:~1,1%" 
60.
set "b7=%name:~2,1%" & set "p8=%pass:~2,1%" 
61.
set "b1=%name:~3,1%" & set "p7=%pass:~3,1%" 
62.
set "b8=%name:~4,1%" & set "p1=%pass:~4,1%" 
63.
set "b6=%name:~5,1%" & set "p4=%pass:~5,1%" 
64.
set "b4=%name:~6,1%" & set "p5=%pass:~6,1%" 
65.
set "b3=%name:~7,1%" & set "p2=%pass:~7,1%" 
66.
 
67.
goto CRYPT1 
68.
 
69.
:CRYPT1 
70.
rem Das eingewntliche Crypten beginnt (ohne Umlaute oder Spezialzeichen) 
71.
set "name=%b1%%b2%%b3%%b4%%b5%%b6%%b7%%b8%" 
72.
set "pass=%p1%%p2%%p3%%p4%%p5%%p6%%p7%%p8%" 
73.
if %counter% LSS 8 ( set "var=b" ) else ( set "var=p" ) 
74.
if %counter% LSS 8 ( set /a counter=%counter%+1 ) else ( set /a pwcounter=%pwcounter%+1 ) 
75.
if %pwcounter% == 8 goto REORG 
76.
if %counter% LSS 8 (set bs=!var%counter%!) else (set bs=!var%pwcounter%!) 
77.
cls 
78.
echo %counter%-%pwcounter% - %globalcount% - %bs% 
79.
echo -%b1%-%b2%-%b3%-%b4%-%b5%-%b6%-%b7%-%b8%- 
80.
echo -%p1%-%p2%-%p3%-%p4%-%p5%-%p6%-%p7%-%p8%- 
81.
 
82.
if "%bs%" == "/" set "bs=z" & goto CRYPT1 
83.
if "%bs%" == "0" set "bs=r" & goto CRYPT1 
84.
if "%bs%" == "9" set "bs=m" & goto CRYPT1 
85.
if "%bs%" == "8" set "bs=g" & goto CRYPT1 
86.
if "%bs%" == "7" set "bs=f" & goto CRYPT1 
87.
if "%bs%" == "6" set "bs=w" & goto CRYPT1 
88.
usw... 
89.
if "%bs%" == "d" set "bs=t" & goto CRYPT1 
90.
if "%bs%" == "c" set "bs=2" & goto CRYPT1 
91.
if "%bs%" == "b" set "bs=v" & goto CRYPT1 
92.
if "%bs%" == "a" set "bs=q" & goto CRYPT1 
93.
 
94.
goto CRYPT1 
95.
 
96.
:END 
97.
set "name=%p7%%b4%%p2%%b8%%b6%%p1%%p8%%b1%" 
98.
set "pass=%p6%%b5%%p4%%p3%%b7%%b2%%b2%%p5%" 
99.
echo. 
100.
echo. 
101.
echo. 
102.
echo. 
103.
echo Codiert sieht dies denn so aus: 
104.
echo. 
105.
echo %name%%pass% 
106.
echo. 
107.
if "%name%%pass%" == "fwnqtanftamqwaam" ( echo SUPER ) else ( echo OOOOOH ) 
108.
pause 
109.
goto START
Bitte warten ..
Mitglied: bastla
14.04.2013, aktualisiert um 16:55 Uhr
Hallo Apop85!

Da Du ja auch %var% noch variabel benötigst, muss die entsprechende Zeile natürlich
if %counter% LSS 8 (set bs=!%var%%counter%!) else (set bs=!%var%%pwcounter%!)
lauten.
Du kannst übrigens
set /a counter=%counter%+1
so kürzer schreiben:
set /a counter+=1
Grüße
bastla
Bitte warten ..
Mitglied: Apop85
14.04.2013, aktualisiert um 23:48 Uhr
So weit so gut...
nun habe ich nur noch folgendes Problem
01.
set !%bs%!=%bs1%
Dies wollte ich oben bei Zeile 70 einbauen...

wobei %bs1% bei der Buchstabenabfrage erzeugt wird. Nun möchte ich ja dass %bs% (z.B. "b1") ein neuer Buchstabe zugewiesen wird z.B. a.

01.
set !%bs%!=%bs1% 
02.
 --> set b1=a
Da happerts noch. Nachher müssten alle Elemente Funktionieren.

Gruss
Bitte warten ..
Mitglied: bastla
15.04.2013 um 14:45 Uhr
Hallo Apop85!

Du musst Dich zwischen !bs! und %bs% entscheiden ...

Grüße
bastla
Bitte warten ..
Mitglied: Apop85
15.04.2013 um 22:00 Uhr
Hab den Fehler gefunden
damit wird obiges ausgeführt.
01.
if "!bs!" NEQ "" set !bs!=!bs1!
Du musst Dich zwischen !bs! und %bs% entscheiden ...
Um die Buchstaben zu übernehmen durfte ich mich nicht entscheiden
01.
if "!%bs%!" == "9" set "bs1=m" & goto CRYPT1
Werde das Komplette Script noch in den Wissensbereich stellen
(Sobald ich mich mal bei delayedexpensions dreingelesen hab)

Werde die Frage nun schliessen.


Vielen dank für eure Hilfe

Grüsse

Apop
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

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

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

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

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...