Batch-Skript, um die Zeilen im Text nur auf die ersten 30 oder 50 Zeichen zu kürzen

1

Ich bin jetzt neu mit Skripten, aber ich finde es wirklich schwierig, den Befehl "für" zu verstehen (besonders mit diesen Token und Trennzeichen usw.). Wenn ich es so sage, denke ich, dass das Kommando dazu verwendet werden kann, was ich tue. Wenn es nicht einfacher ist und es einen einfacheren Weg gibt, ignoriere meine Ignoranz :(

Angenommen, ich habe mehrere Zeilen in einer Textdatei abc.txt, wobei jede Zeile mit "(Anführungszeichen) beginnt und endet. Z.B. eine Datei mit 3 Zeilen

"hey what is going on @mike220. I am working on your car. Its engine is in very bad condition" 
"Because if you knew, you'd get shredded and do it with certainty"
"@honey220 Do you know someone who has busted their ass on a diet only for results to come to a screeching halt after a few weeks"

Wie kann ich jede Zeile innerhalb der Anführungszeichen auf eine feste Länge zuschneiden, z. B. 30, 50 oder 100 Zeichen (einschließlich Leerzeichen) Ich möchte die Anzahl der Zeichen im Stapel eingeben und es kann entsprechend beschneiden und eine Datei def.txt mit abgeschnittenen Zeilen in Anführungszeichen erstellen.

Angenommen, ich gebe 50 ein, sollten die Ergebnisse des obigen Beispiels sein

"hey what is going on @mike220. I am working on you"
"Because if you knew, you'd get shredded and do it"
"@honey220 Do you know someone who has busted their"

Vielen Dank

P.S. Wenn Sie den Befehl "Befehl" verwenden, erläutern Sie den Befehl bitte.

BEARBEITEN: Obwohl die Antwort funktioniert hat, gibt es ein Problem mit nicht-englischen Texten. Ich bekomme verstümmelten Text in Ausgabedatei für nicht englischen Text in Eingabedatei. Jede Hilfe @barlop Hier ist der nicht englische Text (1 Zeile)

"फाइल है इसको ना पढ़े आपको कोई मतलांब नही"
SuperUserMan
quelle
1
Sie beginnen mit der Erklärung, dass Sie Schwierigkeiten haben zu verstehen for Aber fragen Sie dann nach einem Befehl, um Zeichen zu trimmen. Zeigen Sie uns vielleicht, was Sie bisher haben und wo Sie feststecken.
Paul
Was möchten Sie nach 30 mit Charterern machen? einfach entfernen oder eine neue Zeile hinzufügen?
Ould Abba
Warum sollte keiner von euch z. @Paul oder könnte sagen, wie man eine for-Schleife mit Zeichen für Zeichen erstellen kann
barlop
@OuldAbba eine neue Zeile hinzufügen ?! Er sagte nichts über das Hinzufügen einer neuen Zeile! Er sagte Ordnung. und erstellen Sie eine Datei mit den zugeschnittenen Zeilen. Wenn Sie wissen, würde es dem Fragesteller und allen Lesern zugute kommen, Ihre Antwort zu sehen.
barlop
Diese Zeile kann cmd / v helfen: on dann for /f %f in (a.txt) do @(set a=%f & echo !a:~0,3!) obwohl noch nicht da .. aber es gibt die ersten 3 Zeichen von jeder Zeile. Diese Variante trimmt einige Zeichen ab for /f %f in (a.txt) do @(set a=%f & echo !a:~1,-2!)
barlop

Antworten:

3

Das macht es

@echo off

setlocal enableextensions enabledelayedexpansion

set /p num=Enter chars to show between quotes: 
set /a num=%num%+1

for /f "delims=" %%f in (a.txt) do (
set a=%%f

echo !a:~0,%num%!^"
)

Also, in Ihrem Beispiel, das ist in einem.text Jede Zeile beginnt also mit einem Anführungszeichen, und es gibt auch Leerzeichen, obwohl es auch funktioniert, wenn keine Leerzeichen vorhanden sind.

"hey what is going on @mike220. I am working on your car. Its engine is in very bad condition" 
"Because if you knew, you'd get shredded and do it with certainty"
"@honey220 Do you know someone who has busted their ass on a diet only for results to come to a screeching halt after a few weeks"

Und das Batch-Skript ausführen

C:\blah>a.bat
Enter chars to show between quotes: 3
"hey"
"Bec"
"@ho"

C:\blah>a.bat
Enter chars to show between quotes: 50
"hey what is going on @mike220. I am working on you"
"Because if you knew, you'd get shredded and do it "
"@honey220 Do you know someone who has busted their"

C:\blah>

Ich habe jetzt zwei Zeilen hinzugefügt, damit sie in eine Datei def.txt ausgegeben werden

@echo off


setlocal enableextensions enabledelayedexpansion

del def.txt 2>nul


set /p num=Enter chars to show between quotes: 
set /a num=%num%+1

for /f "delims=" %%f in (a.txt) do (
set a=%%f

echo !a:~0,%num%!^"
echo !a:~0,%num%!^" >>def.txt
)


C:\crp\dlsnex>a
Enter chars to show between quotes: 2
"he"
"Be"
"@h"

C:\crp\dlsnex>type def.txt
"he"
"Be"
"@h"

C:\crp\dlsnex>

for Anweisungen in cmd sind etwas kompliziert. Um dies zu verstehen, beginnen Sie einfach mit dem Versuch, eine for-Anweisung zu schreiben, die jede Zeile einer Datei druckt, ohne sie zu beschneiden, und verwenden Sie eine einfache Datei wie eine mit zwei Zeilen abcdefg und hijklmn. Dann diese zur Aussage for /f %f in (a.txt) do @echo %f dann baust du es auf. Aber hier fangen Sie an, wenn Sie herausfinden wollen, wie es geht. Sobald Sie das haben, fügen Sie "delims =" hinzu, um zu sehen, welchen Effekt es hat (möglicherweise benötigen Sie einige Leerzeichen in den Zeilen der Datei, um den Effekt zu sehen). Dann schauen Sie sich an, wie Sie einen Teilstring im Stapel erhalten können. set a = abcdefg echo% a: ~ 0,2% (druckt ab).

barlop
quelle
plz plz plz barlop erklären mir das .... for / f "delims =" %% f in (a.txt) do (set a = %% f echo! a: ~ 0,% num%! ^ ".. ........ so wie Sie dies einer fünften Klasse für Kinder erklären, die jeweils einen Brief lernen. Ich habe es einfach satt, diesen "FOR-Befehl" nicht verstehen zu können (ja, ich komme nicht aus dem Programmierhintergrund). .......... UND noch etwas, ich brauche die Ausgabe in der def.txt-Datei nicht echo :)
SuperUserMan
Um das Programmieren oder Scripting zu lernen, müssen Sie die Dinge abbauen und einfache Dinge im Gras aufbauen. Um es richtig zu verstehen, ist es nicht der beste Weg, um eine detaillierte Erklärung für jede Zeile zu erhalten. Aber selbst etwas zu schreiben und aufzubauen. Sie beginnen also damit, etwas sehr einfaches zu verstehen. Wie eine for -Anweisung, die jede Zeile einer Datei ausgibt (nicht abschneidet). Und Sie sehen, wie, wenn man eine Variable angibt, z. a = abcdefg Wie wird nur ein Teil davon ausgegeben? wie nur die ersten 3 Zeichen.
barlop
ok ich habe etwas verstanden. 1)% f gibt also 1 Zeile aus, warum Sie a = %% f verwendet haben, d. H. Zusätzliches "%"?. 2) was macht das! am Anfang und Ende bedeuten? und was bedeuten ^ und "in command ---! a: ~ 0,% num%! ^" 3) Was bedeutet "delims ="? Vielen Dank. Für 3 Zeichen in Ihrem Beispiel würde ich% a brauchen: ~ 0,3% oder?
SuperUserMan
@SuperUserMan Einige dieser Dinge sind einzigartig für batch. Wenn Sie etwas von cmd versuchen, verwenden Sie% f, wenn Sie etwas in einem Stapel versuchen, stellen Sie fest, dass es nicht funktioniert und dass Sie %% f in verwenden sollten Stapel. Sie können es mit jeder einfachen Zeile aus der Befehlszeile oder aus der Batch-Datei versuchen. Und es kann% a oder was auch immer für% a in (a.txt) sein, echo% a. Im Batch verwenden Sie %% a.
barlop
Die Ausrufezeichen sind etwas völlig Lächerliches an der Charge, was für Programmierer eine Überraschung ist. Normalerweise würden Sie% var% wie in Ihrer von Prozentsätzen umgebenen Variablen ausführen. In einigen Fällen funktioniert das jedoch nicht wie% var% in einem for oder if kann lustig sein, und wenn das passiert, muss man A) diese Zeile haben setlocal enableextensions enabledelayedexpansion und B) verwende! var! anstelle von% var% Und wenn Sie Dinge nur in cmd.exe ausführen und wollen! var! zu arbeiten musst du tun cmd /v:on dann kannst du echo! var!
barlop