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

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

Frage Entwicklung Batch & Shell

Mitglied: ClemensHimmer

ClemensHimmer (Level 1) - Jetzt verbinden

11.05.2012, aktualisiert 23:49 Uhr, 3467 Aufrufe, 5 Kommentare

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
Mitglied: 60730
12.05.2012 um 03:08 Uhr
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]
Bitte warten ..
Mitglied: bastla
12.05.2012, aktualisiert 24.07.2012
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 ) 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
Bitte warten ..
Mitglied: ClemensHimmer
12.05.2012 um 11:02 Uhr
Vielen Dank bastla, das hat mir sehr geholfen, der "trailing blank" ist jetzt weg

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

Danke vielmals,

Grüße ClemensHimmer!
Bitte warten ..
Mitglied: bastla
12.05.2012 um 12:03 Uhr
Hallo ClemensHimmer!
Auch da Problem mit der for-Schleife hab ich selber lösen können
Das war auch der Plan ...

Grüße
bastla
Bitte warten ..
Mitglied: Nemo-G
15.05.2012 um 22:39 Uhr
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.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Probleme mit Dateipfaden in for-Schleife (1)

Frage von Jonas1806 zum Thema Batch & Shell ...

Batch & Shell
gelöst CMD: icacls in for-Schleife (2)

Frage von Lowrider614 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...