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:
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:
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.
Wenn es das erste Dokument ist, wird zum Label numberup gesprungen und die Zahl auf 1 gesetzt.
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:
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.
Hier wird eins zu der Variable NUMBER dazugezählt
Hier wird die Nummer wieder für zukünftige Aurfrufe der Datei in die .txt-Datei gespeichert
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
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
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%
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
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
set /a NUMBER=%NUMBER%+1
Hier wird eins zu der Variable NUMBER dazugezählt
:gotnumber
echo %NUMBER% >number.txt
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 184894
Url: https://administrator.de/forum/probleme-beim-entfernen-des-letzen-leer-zeichen-einer-variable-und-einer-for-schleife-184894.html
Ausgedruckt am: 23.04.2025 um 14:04 Uhr
5 Kommentare
Neuester Kommentar

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]
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]
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 "
Abhilfe schafft zB
(zumindest, wenn es am Ende dieser Zeile kein Leerzeichen gibt
) und/oder ein zusätzlicher "
- warum der auch ohne
Das Konzept selbst (und insbes die verwendete Schleife) solltest Du nochmals überdenken ...
Grüße
bastla
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
>number.txt echo %NUMBER%
set
"-Befehl:set /a NUMBER=NUMBER
%
(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
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.
Seither setze ich Variable immer in der Form
SET "Variable=gewuenschter_Inhalt"
So schleicht sich nicht so leicht ein unerwünschtes Leerzeichen ein.