Entfernen Sie nachgestellte Leerzeichen aus einer Datei mit der Windows batch?
Wie konnte ich trim alle Leerzeichen aus einem text-Datei mit dem Windows-Eingabeaufforderung?
Ich vergaß zu erwähnen, dass ich möchte von der Kommandozeile aus. Möglicherweise w/o keine zusätzliche software
Ich vergaß zu erwähnen. Ich möchte dies tun, indem Sie mit Computer-Sprache. Vorzugsweise ohne Verwendung einer assembler oder compiler 🙂 die Werkzeuge, die Sie können, das ist, was Sie sind für. Andernfalls werden Sie verschwenden Zeit neu zu erfinden-Räder (und wahrscheinlich machen Sie Platz).
Ich vergaß zu erwähnen. Ich möchte dies tun, indem Sie mit Computer-Sprache. Vorzugsweise ohne Verwendung einer assembler oder compiler 🙂 die Werkzeuge, die Sie können, das ist, was Sie sind für. Andernfalls werden Sie verschwenden Zeit neu zu erfinden-Räder (und wahrscheinlich machen Sie Platz).
InformationsquelleAutor HeinrichStack | 2012-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den DosTips RTRIM-Funktion, die Ben Hocking zitiert, kann verwendet werden, um ein Skript zu erstellen, können Sie rechts trimmen Sie jede Zeile in einer text-Datei. Allerdings ist die Funktion relativ langsam.
DosTips user (und moderator) aGerman entwickelt sehr effiziente rechten trim-Algorithmus. Er implementiert den Algorithmus als batch - "makro" - ein Interessantes Konzept der Speicherung von komplexen mini-scripts, die in Umgebungsvariablen, die ausgeführt werden können aus dem Speicher. Die Makros, die Argumente sind ein wichtiges Diskussionsthema in und von sich selbst, dass ist nicht relevant für diese Frage.
Habe ich extrahiert aGerman ' s Algorithmus und steckte es in den folgenden batch-Skript. Das Skript erwartet den Namen einer text-Datei als einziger parameter und geht zur rechten trim die Leerzeichen aus jeder Zeile in der Datei.
Vorausgesetzt, das Skript wird aufgerufen, rtrimFile.Fledermaus, dann kann man von der Kommandozeile aus wie folgt:
Ein Hinweis zur performance
Die original DosTips rtrim-Funktion führt eine lineare Suche und-Standards zu trimmen maximal 32 Räume. Es hat zu iterieren, einmal pro Raum.
aGerman ' s Algorithmus benutzt binäre Suche, und es ist in der Lage, schneiden Sie die maximale string-Länge erlaubt batch (bis zu ~8k Leerzeichen) in 13 Iterationen.
Unfotunately, batch ist sehr LANGSAM, wenn es um die Verarbeitung von text. Auch mit der effizienten rtrim-Funktion, dauert es ~70 Sekunden schneiden Sie ein 1-MB-Datei auf meinem Rechner. Das problem ist, nur das Lesen und schreiben der Datei ohne jegliche änderung, nimmt erhebliche Zeit. Diese Antwort verwendet eine FOR-Schleife zum Lesen der Datei, gepaart mit FINDSTR-Präfix jede Zeile mit der Zeilennummer, so dass leere Zeilen beibehalten werden. Es schaltet die verzögerte Erweiterung zu verhindern
!
wird beschädigt, und verwendet eine Suche und ersetzen-operation zu entfernen, die Nummer der Zeile Präfix aus jeder Zeile. All das, bevor es selbst beginnt zu tun, die rtrim.Leistung konnte nahezu verdoppelt und durch die Verwendung eines Alternative Datei-lese-Mechanismus, der verwendet
set /p
. Aber die set /p-Methode ist begrenzt auf ~1k bytes pro Zeile, und es Streifen nachfolgende steuerzeichen aus jeder Zeile.Wenn Sie brauchen, um regelmäßig zu trimmen, große Dateien, dann sogar eine Verdoppelung der Leistung ist wohl nicht ausreichend. Zeit zum herunterladen (wenn möglich) eine von vielen utilities, die konnte Prozess die Datei in den Wimpernschlag.
Wenn Sie nicht verwenden können, non-native-software, dann können Sie versuchen, VBScript-oder JScript-durchgeführt über das CSCRIPT batch-Befehl. Entweder man wäre VIEL schneller.
UPDATE - eine Schnelle Lösung mit JREPL.BAT
JREPL.FLEDERMAUS ist ein regulärer Ausdruck suchen/ersetzen-Dienstprogramm, das kann sehr effizient das problem zu lösen. Es ist Reine Skript (hybrid charge/JScript), läuft nativ auf allen Windows-Rechnern von XP weiter. Keine 3rd-party-exe-Dateien benötigt werden.
Mit JREPL.BAT irgendwo in Ihrem PFAD, Sie können Streifen nachgestellte Leerzeichen aus Datei "test.txt" mit diesem einfachen Befehl:
Wenn Sie den Befehl innerhalb einer batch-script, dann müssen Sie vor den Befehl mit dem AUFRUF:
Vielen Dank, es hat funktioniert. Ich wünschte, ich könnte verstehen, dieses Skript im detail, w/o dass sich eine batch-Experte 🙂
PS Nur ein kleines feedback auf die Leistung, es ist trimmen eine große text-Datei mit einer rate von etwas weniger als 1 MB / Sek auf einem dual intel 2,66 GHz, xp sp3, 2 GB RAM. Ich weiß, das obige bedeutet fast nichts, aber nur zur info. Für mich, wenn ich zu schneiden Sie ein 10-MB-Datei, es würde bedeuten, mehr als 10 Minuten ... Also, die Frage ist: Könnten Sie sich vorstellen, einige Grenzen für die oben genannten batch -, und einige Möglichkeit, um die Leistung zu erhöhen? Die Zeile set /a "k=4096"%\n% setzt einige Puffer-oder was ist es gut?
Hoppla, der Satz /eine k... line war eine zufällige überbleibsel aus aGerman ' s original-code. Es war harmlos, aber nicht notwendig - habe ich beseitigt. Ich glaube, Sie haben typo/Mathe-Fehler - ich wünschte, diese so schnell wie 1MB/s 😉 ich bekomme ein bisschen weniger als 1MB/min. Ich werde einen Nachtrag über die Leistung.
funktioniert wie ein Charme! Dank
InformationsquelleAutor dbenham
Besorgen Sie sich eine Kopie der CygWin oder die
sed
- Paket von GnuWin32.Dann verwenden, mit dem Befehl:
InformationsquelleAutor paxdiablo
Dos-Tipps hat eine Umsetzung von RTrim, das funktioniert für batch-Dateien:
Wenn Sie nicht verwendet werden, um die Verwendung von Funktionen in batch-Dateien, Lesen Sie diese.
Machen Sie eine batch-Datei, ruft diese Funktion mit Ihrem argument...
InformationsquelleAutor Ben Hocking
Gibt es einen schönen trick, um nachgestellte Leerzeichen zu entfernen, die basierend auf diese Antwort von Benutzer Aacini; ich habe es geändert, so dass alle anderen Räume, die in der Zeichenfolge erhalten. So hier ist der code:
Jedoch, dieser Ansatz schlägt fehl, wenn ein Charakter das set
^
,!
,"
tritt in den string.InformationsquelleAutor aschipfl
Gutes tool zum entfernen Sie nachgestellte Leerzeichen in Dateien in windows:
http://mountwhite.net/en/spaces.html
InformationsquelleAutor John
Fand ich eine sehr schöne Lösung für das trimmen off white-Leerzeichen einer Zeichenkette:
Haben Sie schon genannt eine sub-routine mit
call
erweitert und alle Argumente mit%*
? Sie werden feststellen, dass jede führende und/oder nachgestellte weiße Leerzeichen sind entfernt. Alle white-spaces Auftritt zwischen anderen Zeichen bleiben erhalten; so sind alle anderen Kommando-token-Separatoren,
,;
,=
und auch die non-break-space (Zeichen-code0xFF
). Diesen Effekt werde ich nutzen für mein script:Dieses Skript erwartet einen string, der vom Benutzer eingetragen, die dann getrimmt. Dies kann natürlich auch angewendet werden auf die Zeilen einer Datei (die die original-Frage ist, aber das Lesen solcher zeilenweise mit
for /F
gezeigt wird in anderen Antworten sowieso, also überspringe ich dies hier). Das schneiden der Schnur nur auf einer Seite, fügen Sie ein einzelnes Zeichen an der gegenüberliegenden Seite, vor dem trimmen und entfernen es danach.Dieser Ansatz hat einige Einschränkungen, aber: es behandelt nicht die Zeichen
%
,!
,^
und"
richtig. Um dies zu überwinden, mehrere temporäre string-manipulation Operationen werden benötigt:Update: ich habe erkannt, dass die Zeichen
&
,<
,>
und|
noch Probleme verursachen. Sobald ich eine Lösung finde werde ich wieder hierher kommen und beheben den code entsprechend...InformationsquelleAutor aschipfl
Ich dieses Python 2 Skript print-Zeilen, die mit Leerzeichen und entfernen Sie Sie manuell:
Ich weiß, dass Python ist nicht vorinstalliert, für Windows, aber zumindest funktioniert es cross-Plattform.
InformationsquelleAutor anatoly techtonik