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

Zeichen in variable ersetzen

Frage Entwicklung Batch & Shell

Mitglied: 94451

94451 (Level 1)

13.10.2010, aktualisiert 22:19 Uhr, 6111 Aufrufe, 5 Kommentare

Hallo ihr,

ich möchte gerne einen kasten aus sternen schaffen in diesen kasten sind variablen und ich weiß nie wie lange ein wort ist,...

01.
ECHO   ************************************************* 
02.
ECHO   * %variable1%                                   * 
03.
ECHO   * %variable2%                                   * 
04.
ECHO   * %variable3%                                   * 
05.
ECHO   * %variable4%                                   * 
06.
ECHO   *************************************************
der kasten soll 50 zeichen breit sein,... d.h. [stern][leer]%variable%zeichen bis 49[stern]
jetzt hab ich mir gedacht das ich hinter die variable ne variable schreibe mit 49 leer stellen und dann ersetze ich stelle x mit einem stern (stelle x ergibt sich aus 49- der zeichenlänge der variable)

die fragen sind jetzt

1. wie zähle ich wie lang meine variable ist?

2. wie rechne ich in batch

3. wie ersetze ich ein bestimmtes zeichen (wobei bestimmt unbestimmt ist, also eine variable *musste sein der satz*)


Danke

Grüßle
Mitglied: bastla
13.10.2010 um 22:48 Uhr
Hallo Roadrunner777!
jetzt hab ich mir gedacht das ich hinter die variable ne variable schreibe mit 49 leer stellen und dann ersetze ich stelle x mit einem stern (stelle x ergibt sich aus 49- der zeichenlänge der variable)
Vom Ansatz her schon ganz ok, aber Du musst gar nicht die Länge Deiner Variablen bestimmen (sondern nur die Gesamtlänge vorgeben):
01.
@echo off & setlocal 
02.
set /a len=46 
03.
set "leer=" 
04.
set "stern=" 
05.
setlocal enabledelayedexpansion 
06.
for /L %%i in (1,1,%len%) do ( 
07.
	set "leer=!leer! " 
08.
	set "stern=!stern!*" 
09.
10.
set "stern=**%stern%**" 
11.
setlocal disabledelayedexpansion 
12.
 
13.
::DATA Ueberschrift 
14.
::DATA 
15.
::DATA Kurze Zeile 
16.
::DATA Wirklich gaaaaaaaanz laaaaaaaaange Zeile! 
17.
::DATA Fertig 
18.
 
19.
echo %stern% 
20.
for /f "tokens=1*" %%i in ('findstr /b "::DATA" "%0"') do call :WriteFormattedLine "%%j" 
21.
echo %stern% 
22.
goto :eof 
23.
 
24.
:WriteFormattedLine 
25.
set "zeile=%~1%leer%" 
26.
call set "zeile=%%zeile:~0,%len%%%" 
27.
echo * %zeile% * 
28.
goto :eof
Ist jetzt etwas umfangreicher geworden - die Kurzfassung wäre:
01.
set "zeile=%variable1%                                              " 
02.
echo * %zeile:~,46% *
Kurze Erklärung zum oberen Ansatz:
Die Zeilen 1 bis 11 erzeugen, ausgehend von der gewählten Länge in Zeile 2, die Variablen %leer% mit %len% Leerzeichen und die Variable %stern% mit %len% + 4 Sternen (+ 4 für das jeweiligen Rahmenzeichen an Anfang und Ende der Zeile sowie die zusätzlichen Leerzeichen als Trennung von der eigentlichen Zeile). Die Verwendung von "delayedExpansion" in einem begrenzten Bereich des Batches erlaubt es, die Variablen in der Schleife ohne Verwendung eines Unterprogrammes zu befüllen und trotzdem noch unfallfrei Text mit enthaltenen "!" verwenden zu können.

Die "::DATA"-Zeilen sind für Batch Kommentar (Du könntest auch "REM DATA" verwenden) und werden daher im Ablauf ignoriert, können jedoch in weiterer Folge aus der Batchdatei ausgelesen werden - analog zu den "DATA"-Zeilen in (Uralt-)BASIC.

Dieses Auslesen erfolgt in der Schleife unter Verwendung von "findstr", wobei wegen "tokens=1*" nur das erste vorkommende Leerzeichen (nach "DATA") noch als Trennzeichen interpretiert wird - alle weiteren Leerzeichen bilden einen Bestandteil des zweiten "Tokens": Die so gelesenen Zeilen werden dann dem Unterprogramm zur Formatierung und Ausgabe weitergereicht.

In diesem Unterprogramm wird der Zeile zunächst die erforderliche Anzahl an Leerzeichen hinzugefügt und danach die Zeile auf die vorgegeben Anzahl von Zeichen gekürzt - durch die Verwendung des "call" kann dabei auch die Variable %len% verwendet werden, ohne dass auch hier "delayedExpansion" eingesetzt werden müsste.
Schließlich wird noch die Zeile samt Rahmenzeichen ausgegeben.

Das Unterprogramm ist so ausgelegt, dass es genauso mit
call :WriteFormattedLine "%variable1%"
aufgerufen werden könnte.

Zu beachten wäre, dass bestimmte Sonderzeichen (<|>^&) mit besonderer Bedeutung in einem Batch "maskiert" werden müssten, da die Ausgabe der Zeile ohne umschließende Anfürungszeichen erfolgt - die Maskierung könnte (für jedes Zeichen einzeln) etwa so erfolgen:
set "zeile=%zeile:&=^&%"
Nachteil dabei: Es wird die Zeilenlänge "verfälscht", da "^&" als einzelnes Zeichen "&" ausgegeben wird - daher die angeführten Zeichen nach Möglichkeit vermeiden ...
Noch zu Deinen Fragen:
Zu 1: Aufwändige Variante:
01.
@echo off & setlocal 
02.
set "variable1=1234567" 
03.
 
04.
set /a len=0 
05.
set "vartemp=%variable1%" 
06.
:Loop 
07.
if not defined vartemp goto :Done 
08.
set "vartemp=%vartemp:~1%" 
09.
set /a len+=1 
10.
goto :Loop 
11.
 
12.
:Done 
13.
echo %variable1% hat %len% Zeichen
Hier wird einfach von vorne weg jeweils ein Zeichen weggelassen, bis keines mehr übrig (und daher die Variable %vartemp% nicht mehr "defined") ist.

Biber-Special:
01.
@echo off & setlocal 
02.
set "variable1=1234567" 
03.
 
04.
>%temp%\len.txt echo "%variable1%" 
05.
for %%i in (%temp%\len.txt) do set len=%%~zi 
06.
set /a len-=4 
07.
echo %variable1% hat %len% Zeichen
Die -4 Zeichen ergeben sich aus den mit in die Temp-Datei geschriebenen beiden Anführungszeichen (zur Sicherheit wegen der schon angesprochenen Sonderzeichen) und dem Zeilenende (CR + LF) - und falls Du "%%~zi" suchst:
for /?
(ziemlich am Ende)

Zu 2. und 3.:
set /?
Grüße
bastla
Bitte warten ..
Mitglied: rubberman
13.10.2010 um 23:33 Uhr
Hallo Roadrunner777 & bastla.

Nur ergänzend zu den Lösungen zum Punkt 1:
Man kann auch die Offset Option von FINDSTR nutzen
01.
@echo off &setlocal 
02.
set "variable1=1234567" 
03.
for /f "skip=1 delims=:" %%i in ('^(echo\"%variable1%"^&echo\^)^|findstr /o $') do set /a length=%%i-5 
04.
echo %length% 
05.
pause
... und es gibt noch mehr Möglichkeiten, sprengt aber den Rahmen


Grüße
rubberman
Bitte warten ..
Mitglied: bastla
13.10.2010 um 23:38 Uhr
[OT]
@rubberman
... sprengt aber den Rahmen
Schon zu spät - innerhalb des Rahmens haben ja nur 46 Zeichen Platz ...

Grüße
bastla
[/OT]
Bitte warten ..
Mitglied: rubberman
13.10.2010 um 23:52 Uhr
@bastla

*grins* Wenn ich nun schon aus dem Rahmen gefallen bin, kann ich auch noch mal eben zu einer Lösung mittels "logischer Verschiebung" verlinken. Guckst du hier.

Grüße
rubberman
Bitte warten ..
Mitglied: 94451
14.10.2010 um 06:42 Uhr
Vielen Dank für die vielen Lösungen,

ehrlich gesagt hab ich mich jetzt für die Faule methode entschieden,

01.
set "zeile=%variable1%                                              " 
02.
echo * %zeile:~,46% *
damit ich aber was lerne, beschäftige ich mich auch mal mit den anderen Lösungsansätzen,...

vielen Dank nochmal!!!
Bitte warten ..
Ähnliche Inhalte
VB for Applications
VBScript: Hexwert durch Zeichen (String) ersetzen
gelöst Frage von GurkenhobelVB for Applications12 Kommentare

Hallo Gemeinde, ich benötige wieder einmal Euer sachkundiges Expertenwissen. Und zwar möchte ich ältere Textdokumente (erstellt um 2000, evtl. ...

Batch & Shell
Tilde Zeichen per Batch ersetzen
gelöst Frage von Blackhawk386Batch & Shell6 Kommentare

Hi! Ich habe eine Datei in Textform, in der Umlaute per Batch umgewandelt werden müssen. Dazu habe ich hier ...

Batch & Shell
Batch Variable auf 5 Zeichen begrenzen
gelöst Frage von PinkFLuffyUnicornBatch & Shell5 Kommentare

Hallo zusammen, ich habe folgendes Problem: ich habe ein kleines Batch Programm, welches eine Benutzereingabe erfordert. der Benutzer soll ...

Batch & Shell
Mit findstr einen pfad hinter einem zeichen zu variable setzen
Frage von bilaluiBatch & Shell3 Kommentare

Hallo, zurzeit beschäftige ich mich mit einer Batchdatei, die einen beliebigen Laufwerkspfad hinter einem kurzem Text mit "=" zu ...

Neue Wissensbeiträge
Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 1 StundePerl1 Kommentar

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 2 StundenSicherheit

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 108 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless11 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Wieso kann ich den UPD 7000-9000 nicht freigeben?
Frage von Jayk0bRouter & Routing8 Kommentare

Router: Telekom W 723V Ports: UDP 7000-9000 Können nicht frei gegeben werden. Benutzgrund: Rocket League 7000 – 9000 UDP ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing8 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...