clemenshimmer
Goto Top

Probleme beim entfernen des letzen (Leer-)Zeichen einer Variable und einer for-Schleife

Hallo allerseits,

Ich habe eine knifflige Frage an euch, ich habe Probleme beim ändern einer Variable. Grundsätzlich brauche ich eine .cmd-Datei um im in der Schule erstellten Domäne einen Netzwerkdrucker zu bedienen (naja es ist ein PDF-Drucker und sie wird dazu benötigt eine Datei in einen freigegebenen Ordner zu legen)
Grundsätzlich sieht die Datei so aus, die ihren Zweck grundsätlich erledigt:

@echo off
set USER=%REDMON_USER%
set TITLE=%REDMON_DOCNAME:/=_%
set TITLE=%TITLE:\=_%
set TITLE=%TITLE::=_%
c:\Programme\gs\gs9.04\bin\gswin32c.exe -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dNOSAFER -dAutoRotatePages=/PageByPage -dPDFSETTINGS=/prepress -dCompatibilityLevel=1.4 -sOutputFile="%1.pdf" %1
copy %1.pdf "E:\Daten\PDF\%USER%\%TITLE%.pdf"
del %1.pdf

In den oberen Zeilen werden die Variablen Definiert (TITLE heißt später einfach Dokument und USER ist der username) und in der sechsten wird ein Befehl ich nicht verstehe, aber vom PDF-Drucker kommt und glücklicherweise seinen Zweck tut :P

Nun ist aber das Problem dass wenn man versucht ein zweites Dokument zu drucken, das erste überschrieben wird und was nicht ganz im Sinne der Sache ist.

Daher habe ich bisher den folgenden Skript angefertigt, der je nach Bedarf die Dokumente in DokumentX (wobei X für eine Zahl steht) umzubennen, bei dem ich noch einige Probleme habe:

Das ausgedachte Prinzip:
Der Skript soll eine externe .txt-Datei aufrufen können, in der sich immer nur eine Zahl befindet. Diese Zahl soll nach Dokument (DokumentX) stehen.

Bedinungen:
- Wenn noch keine Dokumente gedruckt wurde steht 0 im .txt-File
- Es wird immer die kleinstmögliche Zahl verwendet (Wenn z.B. Dokument 1-8 gedruckt wurden, 2;3;6 und 7 aber gelöscht wurden, soll Dokument6 in der Variable stehen)
- Wenn alle Dateien gelöscht wurden fängt es wieder bei Dokument1 an
- Wenn keinerlei Dokumente gelöscht wurden, soll der Skript einfach eine Zahl hinaufzählen und sie anhängen.

Und nun der Skript:
(Ich versuche mal den Skript in Blocks zu unterteilen und zu kommentieren um das Lesen zu vereinfachen und die von mir vermuteten Fehler kennzuzeichnen)

Hier liegt höchstwahscheinlich ein Fehler:
set TITLE=Dokument
set /p NUMBER=<number.txt
set NUMBER=%NUMBER:~0,-1%

Hier werden die benötigten Variablen definiert. TITLE manuell und NUMBER wird auf der .txt-File ausgelesen. In der dritten Zeile SOLLTE das letzte Zeichen gelöscht werden, aber da Batch die Nummer immer mit einem Leerzeichen hinten im .txt-File abspeichert.

if %NUMBER%==0 goto numberup

Wenn es das erste Dokument ist, wird zum Label numberup gesprungen und die Zahl auf 1 gesetzt.

if exist "%TITLE%%NUMBER%.txt" goto numberup

Wenn ein Dokument mit der vorgehenden Nummer existiert wird einfach eine Zahl hinaufgezählt indem zum Label numberup gesprungen wird.

Hier könnte es auch gut möglich sein dass ein Fehler existiert:

for %%a IN (%NUMBER%) DO if not exist "%TITLE%%NUMBER%.txt" set /a NUMBER=%NUMBER%-1
goto gotnumber

Hier sollte mit einer Schleife so lange heruntergezählt werden, bis die niedrigste Zahl erreicht wird und dann mit goto gotnumber der Skript beendet werden.

:numberup
set /a NUMBER=%NUMBER%+1

Hier wird eins zu der Variable NUMBER dazugezählt

:gotnumber
echo %NUMBER% >number.txt

Hier wird die Nummer wieder für zukünftige Aurfrufe der Datei in die .txt-Datei gespeichert

SET TITLE=%TITLE%%NUMBER%
echo Ich wuerde Jetzt %TITLE% erstellen!
pause

Am Ende wird Ein Text zum Überprüfen der Richtigkeit des Skripts ausgegeben.


Nun eine Frage an alle begabten Batch-Programmierer: Können Sie mir bitte bei meinem Problem witerhelfen, es wäre eine sehr große Hilfe für mich!

Danke schon im Voraus,

Clemens Himmer, 16, Informatik-Schüler

Content-Key: 184894

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

Printed on: May 9, 2024 at 13:05 o'clock

Mitglied: 60730
60730 May 12, 2012 at 01:08:22 (UTC)
Goto Top
moin,

wenn du Hilfe magst, dann nimm bitte (nein nicht das €cho off) die > raus und packe das zwischen <code> und </code>.
Und dann kann man sich das auch mal anschauen.

PS: PDF CReator bietet die autonummerierung ohne Zusatzzeug an...
[OT]
@ Biber - ich hab den #rgc schon entdeckt...
[/OT]
Member: bastla
bastla May 12, 2012, updated at Jul 24, 2012 at 07:02:07 (UTC)
Goto Top
Hallo ClemensHimmer und willkommen im Forum!

Unabhängig von T-Mos Hinweis: Es fällt nicht unter "Schicksal, unausweichlich", dass in der Textdatei ein "trailing blank" entsteht, sonder das erzeugst Du schon selbst (und bei Verwendung der von T-Mo angesprochenen "Code Formatierung ist es - vor dem ">" - noch besser zu erkennen):
echo %NUMBER% >number.txt
Abhilfe schafft zB
>number.txt echo %NUMBER%
(zumindest, wenn es am Ende dieser Zeile kein Leerzeichen gibt face-wink) und/oder ein zusätzlicher "set"-Befehl:
set /a NUMBER=NUMBER
- warum der auch ohne % (auf der rechten Seite) funktioniert, findest Du mit "set /?" heraus ...
Das Konzept selbst (und insbes die verwendete Schleife) solltest Du nochmals überdenken ...

Grüße
bastla
Member: ClemensHimmer
ClemensHimmer May 12, 2012 at 09:02:36 (UTC)
Goto Top
Vielen Dank bastla, das hat mir sehr geholfen, der "trailing blank" ist jetzt weg face-smile

Auch da Problem mit der for-Schleife hab ich selber lösen können face-smile

Danke vielmals,

Grüße ClemensHimmer!
Member: bastla
bastla May 12, 2012 at 10:03:02 (UTC)
Goto Top
Hallo ClemensHimmer!
Auch da Problem mit der for-Schleife hab ich selber lösen können face-smile
Das war auch der Plan ... face-wink

Grüße
bastla
Member: Nemo-G
Nemo-G May 15, 2012 at 20:39:28 (UTC)
Goto Top
Zwar ist das Problem schon gelöst. aber ich will auch noch meinen Senf dazugeben, da mir zunächst unerklärliche Fehler bei der Batch-Programmeiung einige graue Haare beschert haben.
Seither setze ich Variable immer in der Form

SET "Variable=gewuenschter_Inhalt"

So schleicht sich nicht so leicht ein unerwünschtes Leerzeichen ein.