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

Zeichen in variable ersetzen

Frage Entwicklung Batch & Shell

Mitglied: Roadrunner777

Roadrunner777 (Level 1) - Jetzt verbinden

13.10.2010, aktualisiert 22:19 Uhr, 6043 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: Roadrunner777
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 ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst In Batch variable DOS-Funktion von "größer" und "kleiner" Zeichen unterdrücken (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Variable auf 5 Zeichen begrenzen (5)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

Batch & Shell
Powershell - In Textdatei suchen und ersetzen (3)

Frage von Raaja89 zum Thema Batch & Shell ...

Windows Netzwerk
Windows Server 2003 SBS Netzwerk durch neuen Server Ersetzen (9)

Frage von MultiStorm zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...