Gibt es eine Entsprechung zu 'cut -c' in Windows cmd.exe (oder anderen XP-Standard-Tools)?

8

Ich habe einige Dateien mit fester Zeilengröße und fester Feldgröße, aus denen ich Informationen extrahieren muss. Nornmal würde ich Cygwin ( cut et al) verwenden, aber das ist in diesem Fall keine Option aufgrund von (bonehead) Management-Richtlinien, die ich nicht ändern kann. Es muss mit dem in Windows enthaltenen Standard-XP-Toolset erstellt werden.

Ich muss die 10 Zeichen bei Offset 7 und 4 Zeichen bei Offset 22 (nullbasiert) extrahieren und sie in eine Datei ausgeben, aber mit einer leichten Wendung:

  • Das erste Feld kann ein negatives, positives oder kein Vorzeichen haben (am Anfang oder am Ende). Das Zeichen sollte nach vorne verschoben werden oder ganz entfernt werden, wenn es positiv ist.
  • Im zweiten Feld sollten führende und nachstehende Leerzeichen entfernt sein.

Zum Beispiel:

%Vor%

sollte produzieren ( < zeigt das Ende der Zeile an):

%Vor%     
paxdiablo 14.10.2009, 06:15
quelle

3 Antworten

6

Wenn Sie mit modernen Fenstern arbeiten, sind Sie nicht auf die Befehle von cmd.exe beschränkt. Sie können vbscript verwenden. Wenn Ihre Richtlinie auch nicht vbscript verwenden soll, dann sollten Sie Ihr Management entlassen :)

%Vor%

Zum "Ausschneiden" von Zeichen einer Zeichenkette verwenden Sie die Funktion Mid (). Weitere Informationen finden Sie in der VBScript-Dokumentation mehr.

Speichern Sie das obige als test.vbs und tun Sie in der Befehlszeile

%Vor%

Natürlich kann "substring" auch mit reinem cmd.exe gemacht werden, aber ich werde es einigen anderen überlassen, um Sie zu führen.

Update von Pax: Basierend auf dieser Antwort habe ich folgendes gefunden, was ein guter Anfang sein wird:

%Vor%

Dies entspricht allen Anforderungen, die wir hatten. Wir können die Offsets und Längen später in Kommandozeilenargumente machen.

Aktualisierung beenden.

    
ghostdog74 14.10.2009, 06:40
quelle
5

Diese Seite enthält einige Hinweise zum Extrahieren von Teilstrings in cmd.exe: Ссылка

Diese Seite schlägt vor, dass Sie

verwenden können %Vor%

um eine Variable zu indizieren. Dies scheint Ihre Bedürfnisse zu erfüllen, außer dass Sie nun jede Zeile in eine Variable bringen müssen.

Als nächstes wollen Sie sich die ghastly for loop-Syntax und if und die Verzweigung ansehen (Sie können :labels im Batch aufrufen).

Dieses Zeug ist alles ziemlich hässlich, aber wenn du wirklich dorthin gehen musst ...

Hier ist eine Seite in SO, die Dateien durchläuft und ihnen etwas antut: Wie durchlaufen Sie jede Zeile in einer Textdatei mit einer Windows-Batch-Datei?

    
Daren Thomas 14.10.2009 06:25
quelle
1

Hier ist ein kleines Skript (das in einer BAT / CMD-Datei enthalten sein muss), das sich auf das bezieht, was Daren Thomas vorgeschlagen hat:

%Vor%

Die FOR-Schleife ist der zentrale Teil. Beachten Sie die Verwendung von Befehlsmodifizierern in Anführungszeichen. Ich spezifiziere tokens=11 , weil ich nur an den Unterschlüsseln von AllowedDomains interessiert bin, was an Position 10 ist.

Lesen Sie unbedingt die Hilfe in for /? . Daren hat Recht, wenn er sagt, dass dieses Zeug ziemlich hässlich ist. Und es bricht leicht mit Änderungen zusammen. Es gibt eine Menge nicht intuitiver Feinheiten mit cmd.exe script syntax.

Übrigens ist die GUID die COM-Klassen-ID für das Shockwave Flash Add-on. Es ist schon seit mindestens 2001 vorhanden und könnte daher auch weiterhin relevant sein für vorhersehbare Zukunft. Der Zweck des Skripts besteht darin, die Domänen aufzulisten, in denen Flash, die ich standardmäßig blockieren möchte , erlaubt wurde.

    
Lumi 05.11.2014 13:02
quelle

Tags und Links