mopsi007
Goto Top

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

Content-Key: 157818

Url: https://administrator.de/contentid/157818

Printed on: April 18, 2024 at 20:04 o'clock

Member: rubberman
rubberman Dec 31, 2010 at 23:09:31 (UTC)
Goto Top
Hallo mopsi007!

@echo off &setlocal enabledelayedexpansion
set /a seiten=418

for /l %%a in (1,1,%seiten%) do (
  set /a "n=(%%a + 3) %% 4"  
  if !n! leq 1 set "vor=!vor!%%a,"  
  if !n! geq 2 set "rueck=!rueck!%%a,"  
)

>seiten.txt echo %vor:~,-1%
>>seiten.txt echo %rueck:~,-1%

Happy New Year an alle
rubberman
Member: mopsi007
mopsi007 Dec 31, 2010 at 23:42:41 (UTC)
Goto Top
Boa VIELEN DANK, unglaublich, ich hab gedacht ich werd mit dem Problem alt werden, weil ich hab ganz viel im Internet gesucht, auch hier.

Also die Lösung hat nichts mit dem zu tun, was ich bisher von Batchprogrammen gekannt habe, so mit Schleifen und so. Das ist schon ziemlich komplex in meinen Augen.


Ich danke dir !!

HAPPY NEW YEAR an alle!!
Member: rubberman
rubberman Jan 01, 2011 at 01:39:31 (UTC)
Goto Top
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
Member: mopsi007
mopsi007 Jan 02, 2011 at 00:15:16 (UTC)
Goto Top
Vielen Dank für die Erklärungen, werd mich mal intensiver reinhauen, find das ziemlich spannend, was man so mit Batch alles machen kann.