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

Batch Stringlänge bestimmen (zB. Zeilenlänge, Offset von Zeichen, Spaltenanzahl)

Tipp Entwicklung Batch & Shell

Mitglied: pieh-ejdsch

pieh-ejdsch (Level 2) - Jetzt verbinden

06.08.2012, aktualisiert 23:50 Uhr, 13228 Aufrufe, 1 Kommentar, 1 Danke

Zum bestimmen von Zeichenlängen gibt es schon meherere Varianten.
Wie die Einzelnen Zeichen von der Variable abgeschnitten werden oder der Offset über findstr bestimmt wird (mit temporären Scripten) oder gar eine Temporäre Datei in der Größe bemessen wird.
Hier wird eine Weitere Variante erläutert.



Hallo Admins,

Der CMD gibt in der Hilfe eine WahlOption /Ansi oder /Unicode für Umleitungen von Ausgaben parat.

Da bei Unicode doppelt so viele Zeichen (immer mit Leerschritt) ausgegeben werden und Find sowie more dies als einzelne Zeilenangaben betrachten, werden somit die Zeichen Zeilenweise ausgegeben.

Die CMD mit aktivierter Verzögerung (enable delayedexpansion) kann aber durch eine Befehlverkettung oder Umleitung nicht richtig Verzögert auflösen. Bei deaktivierter Verzögerung klappt dies.

Stringlänge einer Variable

cmd /u /von /c "echo !path!"|find /v ""|findstr .|find /c /v ""
Find gibt die Unicodeausgabe Zeichen für Zeichen je Zeile aus.
Beim Pipen aus der CMD-Instanz muss nachher mit Findsrt . der Klartext gefiltert werden sonst stehen zwei oder drei Zeichen/Zeilen zuviel da.
Dandach wird die Stringlänge mit Find bestimmt.

01.
@echo off 
02.
for /f delims^= %%i in (' cmd /u /von /c "echo !path!"^|find /v ""^|findstr .^|find /c /v "" 
03.
 ') do set /a Stringlength = %%i 
04.
echo Stringlänge ist %Stringlength%

Offset von Zeichen anzeigen

cmd /u /c "type D:\dieEinzeiligeTabelle.csv"| find /v ""|findstr /n ";"
Findstr bekommt dazu den Filter für den Delimiter.
In einer CSV ist zB. nicht jede Spalte mit einen Wert belegt aber es wird nur die vierte Spalte und die siebte Spalte als Wert gebraucht.
Dazu wird der Offset der Delimiter ausgelesen. (Offset ist in dem Sinne nicht der richtige Begriff, weil die Zählung schon mit 1 beginnt.) Die exakte Position in einer Variable ist
echo %Variable:~(WertFundstelle-1) ,1%
01.
@echo off 
02.
setlocal 
03.
 
04.
for /f usebackqdelims^= %%i in ("D:\DieTabelle.scv") do (set "Line=%%i" 
05.
  for /f "tokens=1,2delims=:" %%i in (' cmd /u /von /c "echo(!Line!"^|find /v ""^|findstr /n ";" ^|findsrt /n . ') do set /a OFF%%i = %%j 
06.
  set /a Off5 - = off4 
07.
  set /a Off8 - = off7 -1 
08.
  setlocal enabledelayedexpansion 
09.
  for /f "tokens=1-2" %%%i in ("!off4!,!off5! !off7!,!off7a!") do echo !Line:~%%i!!Line:~%%j! 
10.
  endlocal 
11.
)
Der erste Finstr (2. token) markiert den offset, der zweite Findstr (1. token) markiert die Fundnummer.
Mit off5 wird erst die Länge vom offset ausgerechnet inklusive dem Delimiter.
Bei off8 wird der Delimter aus der Stringlänge herausgerechnet.
Wenn kein achter delimiter da wäre, kann vor dieser Rechnung auf Existenz des Off8 geprüft werden.


Gruß Phil
Mitglied: rubberman
07.08.2012, aktualisiert um 20:14 Uhr
Hallo PH!

Dass find und more das NUL Zeichen als Zeilenumbruch interpretieren, war mir bis jetzt entgangen. Gut zu wissen
Du könntest evtl. noch 2 Pipes sparen. Ob das an der Perfomance etwas ändert, weiß ich allerdings nicht. Müsste man mal testen.
- snip -
01.
for /f eol^=^ 
02.
 
03.
^ delims^= %%i in (' cmd /u /von /c "echo !path!"^|find /v "" ') do set /a Stringlength += 1
- snip -
Diese merkwürdige Leerzeilen-Caret-Kombination setzt für EOL ein LineFeed-Zeichen und ersetzt somit das Semikolon als Standard-EOL. Somit werden per FOR /F Leerzeilen ignoriert, wobei Zeilen beginnend mit Semikolon trotzdem verarbeitet werden ...

Grüße
rubberman

[EDIT]Ups, da waren 2 Zeilen zu viel.[/EDIT]
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Findstr Path CMD ja - Batch Script nein - FireFox Profiles (2)

Frage von ChrisIO zum Thema Batch & Shell ...

Microsoft
Pop-Up Dialog in Batch erstellen (3)

Frage von batchx zum Thema Microsoft ...

Batch & Shell
gelöst Batch starten unter berücksichtigung von Wochenenden, Feiertagen etc (7)

Frage von Kyrinja zum Thema Batch & Shell ...

Batch & Shell
gelöst In txt file an bestimmter Position zeichen ersetzen, Ideen ? (7)

Frage von buliwyf zum Thema Batch & Shell ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Firewall
Welche Firewall ? (18)

Frage von Cyberurmel zum Thema Firewall ...

Windows Server
gelöst Einzelnes Windows Update über GPO deinstallieren (16)

Frage von lordofremixes zum Thema Windows Server ...

Windows Server
GPO zum Deinstallieren von Office Update wird nicht ausgeführt (15)

Frage von lordofremixes zum Thema Windows Server ...