prian0815
Goto Top

Leerzeichen aus Datumsvariable entfernen

Hallo liebes Team,
ich bin hier schon den halben Tag am ausprobieren und rumsuchen, komme aber nicht wirklich weiter im Moment, deshalb hier nun doch die Fragestellung. Folögendes selbstgewähltes Übungsprog will ich erstellen: Ich mäöchte ein letzte Woche erstelletes Tesatprog mit Xcopy dahingehend ändern, dass der angegebene Ordner in den gesichert wird das Datum des aktuellen Tages am Ende aufweißt. Dabei war mir das Forum hier schon mal ne große Hilfe. allerdings habe ich nun festgestellt, dass das %Datum% in meinem Code nach den beiden Pubkten je ein Leerzeichen enthält, welche ich nicht um viel wegbringe. Zudem ist mir aufgefallen, dass zwar in das Upro :Datum gesprungen wird, die Abarbeitung des Progs aber nach dem Ende von :Datum nicht beri dem Befehl nach Goto weitermacht. Ich hab im Mom auch keinen blassen Schimmmer, was ich wo angeben muß um zur rufenden Befehlszeile ziurückzukehren. Ich hoffe einem lernenden kann hier geholfen werden und bedanke mich hierfür schon mal im Vorraus.

Grüße Prian
jetzt hätt ich doch fast noch meinen bisherigen Code vergessen:

echo off & setlocal 
cd \c:
rem Batchprogramm testen der Xcopy-Funktion bzgl. eines >Verzerzeichniss
rem incl. Unterverzeichnissen
cls
goto datum
echo Zielordner erstellen
if not exist %zieldir% md %zieldir%

xcopy "c:\Dokumente und Einstellungen\Brenner\Eigene Dateien" %Zieldir% /S /E /I /H /V /Y  
rem /S = kopiert das angegebene und alle darunter befindlichen
rem /E = kopiert alle Unterverzeichnisse (Leer oder nicht leer)
rem /I = neuen Ordner anlegen, falls nicht vorhanden
rem /H = kopiert auch Dateien mit den Attributen 'Versteckt' und 'System'  
rem /V = Ueberprueft jede neue Datei auf Korrektheit
rem /Y = Dateien ohne Nachfragen berschreiben
if errorlevel 1 goto Error
goto Ende

:Error
echo das kopieren war nicht erfolgreich!

:Datum
set jahr=%date:~-4% 
set mon=%date:~-7,2% 
set tag=%date:~-10,2% 
set datum=%jahr%.%mon%.%tag%
set datum=%datum:" "=""%  
set zieldir="c:\Ziel_xcoptest"%datum%  
echo datum: %datum%
echo zieldir: %zieldir%

Content-Key: 106465

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

Printed on: April 19, 2024 at 17:04 o'clock

Member: bastla
bastla Jan 19, 2009 at 14:33:06 (UTC)
Goto Top
Hallo Prian0815!

Woher die Leerzeichen kommen kann ich zwar nicht nachvollziehen, aber die Zeile zum Entfernen sollte so aussehen:
set "datum=%datum: =%"

Wenn Du ":Datum" als Unterprogramm aufrufen willst, musst Du das auch tun, und nicht einfach per "goto" dort hin springen:
call :Datum

Außerdem solltest Du das Hauptprogramm ordentlich beenden: Ersetze dazu "goto Ende" durch "goto :eof" und setze ein weiteres "goto :eof" an das Ende des ":Error"-Teiles (also in die derzeitige Zeile 22).

Grüße
bastla
Member: Prian0815
Prian0815 Jan 19, 2009 at 15:08:41 (UTC)
Goto Top
herzlichen Dank dir Bastla,
immer diese kleinen aber feinen Startschwierigkeiten. An einen Call hätte ich von allein wahrscheinlich nie gedacht, obwohl das ja nun absolut logisch ist uind sein sollte. Und was das Beenden mit goto :eof anbetrifft, vor allem am Ende des Error-Teils hast du natürlich vollkommen recht.
Nachvollziehen, kann ich zum einen nicht wo er die Leerzeichen überhaupts hernimmt, und zum anderen, warum er diese nun nicht entfernt, wenn ich das Prog mit Echo on laufen lasse . oder sieht das da nur so aus. bei einrem lauf mit echo off war auf jeden Fall alles in Ordnung. Hier für alle interesierten noch der Code

echo off & setlocal 
cd \c:
rem Batchprogramm testen der Xcopy-Funktion bzgl. eines >Verzerzeichniss
rem incl. Unterverzeichnissen
cls
call :datum
echo Zielordner erstellen
if not exist %zieldir% md %zieldir%

xcopy "c:\Dokumente und Einstellungen\Brenner\Eigene Dateien" %Zieldir% /S /E /I /H /V /Y  
rem /S = kopiert das angegebene und alle darunter befindlichen
rem /E = kopiert alle Unterverzeichnisse (Leer oder nicht leer)
rem /I = neuen Ordner anlegen, falls nicht vorhanden
rem /H = kopiert auch Dateien mit den Attributen 'Versteckt' und 'System'  
rem /V = Ueberprueft jede neue Datei auf Korrektheit
rem /Y = Dateien ohne Nachfragen berschreiben
if errorlevel 1 goto Error
goto Ende

:Error
echo das kopieren war nicht erfolgreich!

:Datum
set jahr=%date:~-4% 
set mon=%date:~-7,2% 
set tag=%date:~-10,2% 
set datum=%jahr%.%mon%.%tag%
set "datum=%datum: =%"  
set zieldir="c:\Ziel_xcoptest"%datum%  
echo datum: %datum%
echo zieldir: %zieldir%

Gruß Prian
Member: bastla
bastla Jan 19, 2009, updated at Oct 18, 2012 at 16:37:38 (UTC)
Goto Top
Hallo Prian0815!

Hinsichtlich der Leerzeichen kann ich leider nichts beitragen, da diese bei mir gar nicht erst auftauchen ...

Zum "xcopy" noch einige Anmerkungen:
  • Den Zielordner musst Du nicht vorweg erstellen - im Gegensatz zu "copy" macht "xcopy" das bei Bedarf selbst.
  • Wenn Du "/e" verwendest, ist "/s" inkludiert.
  • Anstelle von "/i" kannst Du einfach "%Zieldir%\" schreiben.
  • "/v" kannst Du, lt gewöhnlich bestens informierten Quellen face-wink, ebenfalls weglassen.

Grüße
bastla
Member: Biber
Biber Jan 19, 2009 at 15:24:37 (UTC)
Goto Top
Moin prian0815 und bastla,

Woher die Leerzeichen kommen kann ich zwar nicht nachvollziehen...
Aber ich.
Es sind wieder unbeabsichtigte trailing blanks hinter die eigentliche Variablenzuweisung mit SET geraten.
Und zwar hier (ich deute so ein Leerzeichen mal als Unterstrich an):

....
:Datum
set jahr=%date:~-4%_
set mon=%date:~-7,2%_
set tag=%date:~-10,2%_
set datum=%jahr%.%mon%.%tag%
set datum=%datum:" "=""%
set zieldir="c:\Ziel_xcoptest"%datum%
echo datum: [%datum%] 
echo zieldir: [%zieldir%]
Die eckigen Klammern [.. ] unten habe ich zur Visualisierung ergänzt-
Mit den originalen Leerzeichen statt der sichtbaren Unterstriche kommt heraus:
datum: [1.09 .9. .19 ]
zieldir: ["c:\Ziel_xcoptest"1.09 .9. .19 ]  
{ wobei ich hier nur auf die Leerzeichen-Problematik eingehen will.
Den Hauptpart hat bastla schon erledigt.}

Abhilfe, mit der ich spürbar weniger Probleme habe:
  • Die SET-Zuweisungen explizit mit einem Anführungszeichen VOR der Variablen beginnen
  • und einem Anführungszeichen nach dem Value/dem zugewiesenen Wert abschliessen.

Beispiel.
....
Set "jahr=%date:~-4%"  
set "mon=%date:~-7,2%"   
set "tag=%date:~-10,2%"  
....

Grüße
Biber
Member: Prian0815
Prian0815 Jan 20, 2009 at 08:54:28 (UTC)
Goto Top
Hallo Biber,
auch dir meinen herzlichen Dank für die Aufklärung und die Variante, zur Abhilfe, welche auch mir sehr gut gefällt, allein schon, weil's somit ein Befehl weniger zum ausführen ist. Somit habe ich erneut von deinen Kenntnissen priofitieren dürfen, wie ich das zur Zeit durch das Studium deines Workshops "Batch for Runaways " eh ständig machhe.

Mit herzlichen Grüßen Prian - the Newbie (or Runaway)