Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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

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, 13568 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
Batch bestimme Zeile einer vorherigen batch einfügen (9)

Frage von Frensche zum Thema Batch & Shell ...

Batch & Shell
gelöst Via Batch Zeichen in Textzeilen einfügen (3)

Frage von LuceDeCiello zum Thema Batch & Shell ...

Batch & Shell
Dateien umbenennen - ersten Zeichen entfernen (4)

Frage von jan999 zum Thema Batch & Shell ...

Windows 10
gelöst Standartprogramme nach Dateiendung bestimmen (3)

Frage von tomaschku zum Thema Windows 10 ...

Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(2)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Router & Routing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

TK-Netze & Geräte
TK-Anlage VoIP - DECT Erweiterung (16)

Frage von Lynkon zum Thema TK-Netze & Geräte ...