okidoki
Goto Top

Batch Zeichen (bsp x) nach Variablen-Anzahl setzen

Guten Tag,
nach schon einigen Fragen und vielen gefundenen Anworten bin ich von diesem Forum total begeistert! Das Beste was es gibt in dieser Art!

Nach der Feststellung der Länge einer Variable (die dann als Zahl in einer Datei gespeichert wird) möchte ich die Anzahl als Zeichen x anzeigen lassen.
Also: Eingabe: Wort = 4 (Zeichen) in *.txt, dann 4 (Variable) auslesen und anzeigen als: xxxx

set #=%MyVar%
set length=0

:loop
if defined # (set #=%#:~1%&set /A length += 1&goto loop)
>anzahl.txt echo %MyVar%

???

Gruß OKIDOKI

Content-Key: 179621

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

Printed on: April 18, 2024 at 20:04 o'clock

Member: bastla
bastla Jan 26, 2012 at 15:37:13 (UTC)
Goto Top
Hallo OKIDOKI!

So ganz klar ist mir Dein Vorhaben nicht ...

Wozu soll (abgesehen davon, dass Deine Zeile 6 das ursprüngliche Wort schreibt) die Länge in die Datei geschrieben werden, bzw was willst Du letztlich erreichen?

Dein bisheriger Ansatz ermittelt ja schon die Zeichenanzahl - wenn dann ein String aus lauter "x" mit der Länge der gefundenen Anzahl nur ausgegeben werden soll, könnte das zB so gehen:
@echo off & setlocal
set "#=%myVar%"  
set /a length=0

:loop
if defined # (set #=%#:~1% & set /a length+=1& goto loop)

for /L %%i in (1,1,%length%) do <nul set /p=x
echo\
echo Das war's.  
Alternativ könntest Du einfach einen String mit der maximal möglichen Länge vorgeben, also
set "String=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
und danach das gewünschte Stück "abschneiden":
call set "TeilString=%%String:~-%length%%%"
Grüße
bastla
Member: OKIDOKI
OKIDOKI Jan 26, 2012 at 16:06:58 (UTC)
Goto Top
Hallo bastla,

mein Kopf ist verdreht, ich hole noch einmal aus:

In einer Datei *.txt steht eine Zahl (an einer bestimmten Stelle). Diese Zahl soll ausgelesen werden und die Zahl als Zeichen ausgegeben werden. Hierbei handelt es sich um die Anzahl eines Passwortes, das als xxxx angezeigt werden soll:

@echo off &setlocal enabledelayedexpansion
for /f "usebackq delims=" %%i in ("pass.txt") do set Zeile=%%i & goto out  

:out
set len=%Zeile:~3,1%
... nun soll %len% als x-Zeichen ausgegeben werden!

Gruß OKIDOKI
Member: bastla
bastla Jan 26, 2012 at 16:09:43 (UTC)
Goto Top
Hallo OKIDOKI!

Bis auf die Tatsache, dass die Länge nun eben nicht in %length%, sondern in %len% steht, sollten eigentlich beide Vorschläge oben passen ...

Grüße
bastla

P.S.: Das "goto out" ist sicher nicht nötig (und ein Sprung aus einer "for"-Schleife auch nicht empfehlenswert) ...
Member: OKIDOKI
OKIDOKI Jan 26, 2012 at 16:12:15 (UTC)
Goto Top
... sag jetzt nichts bastla face-wink

@echo off & setlocal
@echo off &setlocal enabledelayedexpansion
for /f "usebackq delims=" %%i in ("pass.txt") do set Zeile=%%i & goto out  

:out
set len=%Zeile:~3,1%

for /L %%i in (1,1,%len%) do <nul set /p=x
echo\
echo Das war's  
Pause

face-wink

Vielleicht noch die Frage, ob die Diskussion um ein Passowrtgenerator auf Batch-Basis weitergeführt werden soll (wie schon an anderer Stelle)? Ich behelfe mir mit Selbstgasteltem:
Passworteingabe, Zufallszahl, Passwort dahinter, weitere Zufallszahl -> dann Auslesen / Sicherheit ist natürlich nicht unendlich...

So long, danke bastla

OKIDOKI

PS: Oko, du warst schneller ...

@echo off & setlocal
@echo off &setlocal enabledelayedexpansion
for /f "usebackq delims=" %%i in ("pass.txt") do set Zeile=%%i  

set len=%Zeile:~3,1%

for /L %%i in (1,1,%len%) do <nul set /p=x
echo\
echo Das war's  
Pause

Bleibt für mich noch die Frage, wie ich den Sprung aus der for-Schelife rausbekomme...
Member: bastla
bastla Jan 26, 2012 at 16:18:15 (UTC)
Goto Top
Hallo OKIDOKI!
Bleibt für mich noch die Frage, wie ich den Sprung aus der for-Schelife rausbekomme...
Soferne Du nur die erste Zeile der Datei benötigst, einfach:
set /p Zeile=<pass.txt
Alternative:
set "Zeile="  
for /f "usebackq delims=" %%i in ("pass.txt") do if not defined Zeile set "Zeile=%%i"  
Im bisher geposteten Teil gibt es übrigens noch keine Notwendigkeit für "delayedExpansion" - Du könntest daher vorläufig die Zeile 2 ersatzlos streichen ...

Grüße
bastla
Member: OKIDOKI
OKIDOKI Jan 26, 2012 at 19:35:12 (UTC)
Goto Top
Hallo bastla,

klappt super!
Allerdings habe ich es ausprobiert ""delayedExpansion" zu streichen. Aber dann hat es nicht funktioniert ...
Erste Zeile der txt: 9408di;M;bg6sU6dy ... Ausgegebene Meldung: !Zeile:~944,8! Hat das etwas mit dem Anfang der Zeile zu tun?
Warum es stehen bleiben muss, weiß ich aber nicht!

PS: Könntest du mir noch die Funktion von echo\ deiner o.g. Formel erklären?


Gruß
OKIDOKI
Member: bastla
bastla Jan 26, 2012, updated at Oct 18, 2012 at 16:49:54 (UTC)
Goto Top
Hallo OKIDOKI!
Könntest du mir noch die Funktion von echo\ deiner o.g. Formel erklären?
Da die Ausgabe der einzelnen "x" jeweils ohne Zeilenumbruch durchgeführt wird, muss am Ende noch einer her - ob Du dafür
echo.
oder
echo\
oder
echo(
verwendest, ist (fast) egal ...
Ausgegebene Meldung: !Zeile:~944,8! Hat das etwas mit dem Anfang der Zeile zu tun?
Wenn Du keine "delayedExpansion" verwendest (meine Anmerkung war nur auf den hier geposteten Schnipsel bezogen), musst Du natürlich die Variablenschreibweise mit % und nicht mit ! vornehmen ...

Grüße
bastla
Member: OKIDOKI
OKIDOKI Jan 26, 2012 at 20:23:52 (UTC)
Goto Top
Hallo bastla,

ich muss noch viel lernen - eijajeijajei!

Herzlichen Dank!
OKIDOKI