Top-Themen

Aktuelle Themen (A bis Z)

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, 1671 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 ..
Ähnliche Inhalte
Batch & Shell
Txt Inhalt in batch variabel verwenden
gelöst Frage von quan81Batch & Shell17 Kommentare

Liebes Forum ich bin neu dabei und freu mich wenn mir jemand helfen kann. Ich versuche per .bat file ...

Batch & Shell
Variabel Weiterleitung zu Variabel CMD
gelöst Frage von Lasky94Batch & Shell4 Kommentare

Sehr geehrte Administratoren Ich bin an einen Projekt dran, welcher ich wegen einen Fehler nicht weiterkomme. Ich mache gerade ...

JavaScript
JavaScript Variabel an PHP übermitteln
gelöst Frage von miichiii9JavaScript3 Kommentare

Hiiii ich habe eine JavaScript Variabel und möchte dies nun in PHP verwenden Bei der Variabel handelt es sich ...

Batch & Shell
Variabel aus einer Text Datei übernemen
Frage von soritoseBatch & Shell1 Kommentar

Hallo ich bin es mal wieder der Soritose und ich habe auch wieder ein Problem wie man aus der ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 12 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 14 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...