Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch-Datei zum Schreiben von Zahlen in eine txt-Datei

Frage Entwicklung Batch & Shell

Mitglied: mopsi007

mopsi007 (Level 1) - Jetzt verbinden

31.12.2010, aktualisiert 23:53 Uhr, 5613 Aufrufe, 4 Kommentare

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
Mitglied: rubberman
01.01.2011 um 00:09 Uhr
Hallo mopsi007!

01.
@echo off &setlocal enabledelayedexpansion 
02.
set /a seiten=418 
03.
 
04.
for /l %%a in (1,1,%seiten%) do ( 
05.
  set /a "n=(%%a + 3) %% 4" 
06.
  if !n! leq 1 set "vor=!vor!%%a," 
07.
  if !n! geq 2 set "rueck=!rueck!%%a," 
08.
09.
 
10.
>seiten.txt echo %vor:~,-1% 
11.
>>seiten.txt echo %rueck:~,-1% 
12.
 
Happy New Year an alle
rubberman
Bitte warten ..
Mitglied: mopsi007
01.01.2011 um 00:42 Uhr
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!!
Bitte warten ..
Mitglied: rubberman
01.01.2011 um 02:39 Uhr
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
Bitte warten ..
Mitglied: mopsi007
02.01.2011 um 01:15 Uhr
Vielen Dank für die Erklärungen, werd mich mal intensiver reinhauen, find das ziemlich spannend, was man so mit Batch alles machen kann.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Bestimmte Daten aus CSV per Windows BATCH Datei in .txt Format schreiben lassen. (9)

Frage von freshman2017 zum Thema Batch & Shell ...

Entwicklung
gelöst Verzeichnise sichern mit batch datei (Win10) (13)

Frage von Limbach zum Thema Entwicklung ...

Neue Wissensbeiträge
Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Router & Routing

PfSense auf Supermicro Intel Xeon D-15x8 SoC Bare Bone

Tipp von Dobby zum Thema Router & Routing ...

Windows Server

Exchange 2010 auf Windows Server 2016 und AD

(2)

Tipp von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Brauche Hilfe: Mit (schnellem) WLAN Strecke überbrücken (19)

Frage von pierrehansen zum Thema LAN, WAN, Wireless ...

Basic
Programmierung von Windows Programmen (10)

Frage von Ghost108 zum Thema Basic ...

C und C++
Fehlendes verständiss von C und C++ (8)

Frage von zelamedia zum Thema C und C ...