Batch-Datei zum Schreiben von Zahlen in eine txt-Datei
Hi! Ich hab mich noch nie mit Batchprogrammen beschäftigt, bin auch was das Programmieren betrifft, nicht so der Könner. Aber ich hab ein Problem: Ich will was in einer bestimmten Reihenfolge ausdrucken (eine Bedienungsanleitung) und da das über 400 Seiten sind hatte ich folgende Idee: Seite 1 und 2 auf die Vorderseite des Blattes und 3 und 4 auf die Rückseite des Blattes, dann wieder Seite 5 und 6 auf die Vorderseite des nächsten Blattes und so weiter (gedruckt soll im Querformat werden).
Ich hab kein Tool gefunden, das so drucken kann und auch mein Canon Drucker unterstützt das nicht direkt. Man kann nur einzelne Seiten eingeben, durch Beistriche getrennt.
Es geht jetzt genau um diese Zahlenwerte für einen (einseitigen) Druckdurchlauf. Also bei 418 Seiten müssten da stehen 1,2,5,6,9,10,13,14 usw.
Für den zweiten Durchlauf (Rückseite der bereits bedruckten Blätter) müssten dann die Seiten 3,4,7,8,11,12,15,16 gedruckt werden.
Wie schaffe ich es, eine txt Datei zu erstellen (mit Hilfe einer Batch Datei) wo obig beschriebene Zahlen ohne Leerzeichen und ohne Zeilenumbrüche in je einem Block stehen, sodass man einfach mit copy-paste die Zahlen, jeweils durch Beistriche getrennt, in das Druckerprogramm kopieren kann.
Die Zahlen und die Beistriche hab ich geschaft, aber ich habs nicht geschaft, den Zeilenumbruch rauszubekommen.
Mein bisheriges Batch (besser gesagt der erste Durchlauf, für den 2. Durchlauf hab ich ein 2. Batch gemacht):
@echo off
cls
set /p start=Erste Seite:
set /p ende=Letzte Seite:
set /a counter=%start%-1
set /a subcounter=0
:loop
set /a counter+=1
set /a subcounter+=1
if %subcounter%==1 goto weiter
if %subcounter%==2 goto weiter
echo %counter%,>>Seiten2.txt
:weiter
if %subcounter%==4 set subcounter=0
if %counter%==%ende% goto end
goto loop
:end
pause
Vielleicht weiss wer was!
Danke
Ich hab kein Tool gefunden, das so drucken kann und auch mein Canon Drucker unterstützt das nicht direkt. Man kann nur einzelne Seiten eingeben, durch Beistriche getrennt.
Es geht jetzt genau um diese Zahlenwerte für einen (einseitigen) Druckdurchlauf. Also bei 418 Seiten müssten da stehen 1,2,5,6,9,10,13,14 usw.
Für den zweiten Durchlauf (Rückseite der bereits bedruckten Blätter) müssten dann die Seiten 3,4,7,8,11,12,15,16 gedruckt werden.
Wie schaffe ich es, eine txt Datei zu erstellen (mit Hilfe einer Batch Datei) wo obig beschriebene Zahlen ohne Leerzeichen und ohne Zeilenumbrüche in je einem Block stehen, sodass man einfach mit copy-paste die Zahlen, jeweils durch Beistriche getrennt, in das Druckerprogramm kopieren kann.
Die Zahlen und die Beistriche hab ich geschaft, aber ich habs nicht geschaft, den Zeilenumbruch rauszubekommen.
Mein bisheriges Batch (besser gesagt der erste Durchlauf, für den 2. Durchlauf hab ich ein 2. Batch gemacht):
@echo off
cls
set /p start=Erste Seite:
set /p ende=Letzte Seite:
set /a counter=%start%-1
set /a subcounter=0
:loop
set /a counter+=1
set /a subcounter+=1
if %subcounter%==1 goto weiter
if %subcounter%==2 goto weiter
echo %counter%,>>Seiten2.txt
:weiter
if %subcounter%==4 set subcounter=0
if %counter%==%ende% goto end
goto loop
:end
pause
Vielleicht weiss wer was!
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 157818
Url: https://administrator.de/contentid/157818
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo mopsi007 und (bevor ich's wieder vergesse) willkommen im Forum.
Dann erkläre ich dir noch ein paar Dinge, damit du auch verstehst wie es funktioniert.
Das SETLOCAL ENABLEDELAYEDEXPANSION sorgt dafür, dass Umgebungsvariablen innerhalb einer Zeile oder eines Blocks immer zum aktuellen Wert aufgelöst werden. Dabei werden die Variablennamen in Ausrufezeichen, statt in Prozentzeichen gefasst.
Die FOR /L Schleife weist der Laufvariablen eine inkrementierte (oder auch dekrementierte) Abfolge von numerischen Werten zu. Der Klammerausdruck bedeutet dabei (Start,Schritt,Ende). Für dein Beispiel also: Angefangen bei 1 immer um 1 inkrementiert, bis 418 erreicht ist.
Die nächste Zeile (5) ist die eigentlich interessante.
Die Modulofunktion mit dem Operator % (im Batch %%) gibt den Rest einer Division wieder. Da es sich bei dir immer um eine Abfolge von 4 Seiten handelt (2 auf Vor- und 2 auf Rückseite), ist der Divisor 4. Die Variable n hat also immer den Wert des Rests, der nur zwischen 0 und 3 liegen kann.
(1 + 3) / 4 = 1 ... Rest 0
(2 + 3) / 4 = 1 ... Rest 1
(3 + 3) / 4 = 1 ... Rest 2
(4 + 3) / 4 = 1 ... Rest 3
(5 + 3) / 4 = 2 ... Rest 0
(6 + 3) / 4 = 2 ... Rest 1
usw.
Nun musst du nur noch prüfen, ob n kleiner oder gleich 1 ist (Vorseite), bzw. größer oder gleich 2 (Rückseite) und die entsprechende Variable (vor bzw. rueck) um den aktuellen Wert der Laufvariablen %%a und ein Komma erweitern.
Hoffe das hilft.
Grüße
rubberman
Dann erkläre ich dir noch ein paar Dinge, damit du auch verstehst wie es funktioniert.
Das SETLOCAL ENABLEDELAYEDEXPANSION sorgt dafür, dass Umgebungsvariablen innerhalb einer Zeile oder eines Blocks immer zum aktuellen Wert aufgelöst werden. Dabei werden die Variablennamen in Ausrufezeichen, statt in Prozentzeichen gefasst.
Die FOR /L Schleife weist der Laufvariablen eine inkrementierte (oder auch dekrementierte) Abfolge von numerischen Werten zu. Der Klammerausdruck bedeutet dabei (Start,Schritt,Ende). Für dein Beispiel also: Angefangen bei 1 immer um 1 inkrementiert, bis 418 erreicht ist.
Die nächste Zeile (5) ist die eigentlich interessante.
Die Modulofunktion mit dem Operator % (im Batch %%) gibt den Rest einer Division wieder. Da es sich bei dir immer um eine Abfolge von 4 Seiten handelt (2 auf Vor- und 2 auf Rückseite), ist der Divisor 4. Die Variable n hat also immer den Wert des Rests, der nur zwischen 0 und 3 liegen kann.
(1 + 3) / 4 = 1 ... Rest 0
(2 + 3) / 4 = 1 ... Rest 1
(3 + 3) / 4 = 1 ... Rest 2
(4 + 3) / 4 = 1 ... Rest 3
(5 + 3) / 4 = 2 ... Rest 0
(6 + 3) / 4 = 2 ... Rest 1
usw.
Nun musst du nur noch prüfen, ob n kleiner oder gleich 1 ist (Vorseite), bzw. größer oder gleich 2 (Rückseite) und die entsprechende Variable (vor bzw. rueck) um den aktuellen Wert der Laufvariablen %%a und ein Komma erweitern.
Hoffe das hilft.
Grüße
rubberman