Einfache Batch-Datei funktinoert nicht mehr wg Syntaxfehler
Hallo,
habe diese Batch-Datei, die sowohl unter Vista als auch jetzt in Windows7 bis heute tadellos ihren Dienst verrichtet hat.
Seit heute morgen kein kopieren, stattdessen ein Syntaxfehler. Was mache ich falsch?
Grüße und vielen Dank!
Andreas
@echo off
set datei=c:\Users\Andreas\Desktop\Text\Alles\Struktur.doc
set zielprefix=c:\Users\Andreas\Desktop\Text\Alles\Backups\
set zielext=doc
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set std=%time:~-11,2%
set min=%time:~-8,2%
set sek=%time:~-5,2%
copy %datei% %zielprefix%%jahr%-%monat%-%tag%-%std%-%min%-%sek%-Text.doc
start %datei%
EDIT: ohne mein zutun klappt es nun auch wieder. Könnt ihr nachvollziehen warum dies ganz plötzlich mal funktioniert und mal nicht?
OS ist Win7 Prof, beinahe neues System (Office und Firefox), keine OS-Einstellungsänderungen gemacht etc.
habe diese Batch-Datei, die sowohl unter Vista als auch jetzt in Windows7 bis heute tadellos ihren Dienst verrichtet hat.
Seit heute morgen kein kopieren, stattdessen ein Syntaxfehler. Was mache ich falsch?
Grüße und vielen Dank!
Andreas
@echo off
set datei=c:\Users\Andreas\Desktop\Text\Alles\Struktur.doc
set zielprefix=c:\Users\Andreas\Desktop\Text\Alles\Backups\
set zielext=doc
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set std=%time:~-11,2%
set min=%time:~-8,2%
set sek=%time:~-5,2%
copy %datei% %zielprefix%%jahr%-%monat%-%tag%-%std%-%min%-%sek%-Text.doc
start %datei%
EDIT: ohne mein zutun klappt es nun auch wieder. Könnt ihr nachvollziehen warum dies ganz plötzlich mal funktioniert und mal nicht?
OS ist Win7 Prof, beinahe neues System (Office und Firefox), keine OS-Einstellungsänderungen gemacht etc.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 164133
Url: https://administrator.de/contentid/164133
Ausgedruckt am: 25.11.2024 um 00:11 Uhr
18 Kommentare
Neuester Kommentar
Hallo und Willkommen im Forum.
Kleiner Tipp zur Fehlersuche:
fang mal mit
@echo on
an und sieh dir den Ablauf deiner Batch in der Konsole an, dann siehst du die Zeile, in der ein Fehler auftritt.
Und bitte zukünftig beim Posten von Programmzeilen die < Code>- Formatierung in der Formatierungshilfe benutzen, das liest sich einfacher.
Gruß
Aloha,
klar:
greetz André
edit: nicht wundern, ich mochte dein „minus” nicht in den Variablen *gg*
P.S.: Die Zieldatei in Zollzeichen zu setzen wäre generell auch nicht verkehrt (genau so wie sämtliche Pfade im Allgemeinen)
klar:
set "jahr=%date:~-4%"
set "monat=%date:~3,2%"
set "tag=%date:~0,2%"
if %time:~0,2% lss 10 (set "std=0%time:~1,1%") else (set "std=%time:~0,2%")
set "min=%time:~3,2%"
set "sek=%time:~6,2%"
greetz André
edit: nicht wundern, ich mochte dein „minus” nicht in den Variablen *gg*
P.S.: Die Zieldatei in Zollzeichen zu setzen wäre generell auch nicht verkehrt (genau so wie sämtliche Pfade im Allgemeinen)
Aloha,
zusätzlich noch eine Anmerkung:
Wenn zum Testen
greetz André
zusätzlich noch eine Anmerkung:
Wenn zum Testen
echo on
aktiv ist, dann entweder die zu testende batch aus dem cmd aufrufen oder zumindest eine pause
setzen, sonst siehst du auch nichts, wenn gleich alles geschlossen wird ^_^ und irgendwann fangen wir auch hier an goto :eof
zu setzen *lach*greetz André
Hi,
Wenn in einem Pfad ein Leerzeichen enthalten ist, musst du den Pfad in Anführungszeichen setzen.
Bist du sicher, dass hinter den Zahlen jeweils ein Leerzeichen steht?
Gruß
Zitat von @asd333:
habe nun alles genauso eingetragen, dennoch erscheint in dieser Zeile ein Syntaxfehler aufgrund von Leerzeichen.
habe nun alles genauso eingetragen, dennoch erscheint in dieser Zeile ein Syntaxfehler aufgrund von Leerzeichen.
copy %datei% %zielprefix%%jahr%-%monat%-%tag%-%std%-%min%-%sek%-Text.doc
Wenn in einem Pfad ein Leerzeichen enthalten ist, musst du den Pfad in Anführungszeichen setzen.
copy %datei% "%zielprefix%%jahr%-%monat%-%tag%-%std%-%min%-%sek%-Text.doc"
Bist du sicher, dass hinter den Zahlen jeweils ein Leerzeichen steht?
nämlich: Ursprungsordner>copy Urpsrungsdatei Zieltordner\2011 -04 -07 -13-09 -44-Text.doc Syntaxfehler
Gruß
Aloha,
my mistake, ich habe den Bug der Forensoftware nicht bedacht und glatt die sonst immer gesetzten Zollzeichen bei den
greetz André
@99045, ja ich denke, er ist sich sicher, denn die Forensoftware schiebt gerne noch ein Leerzeichen hinterher (kannst du auch im Code überprüfen ^_^ bei ihm sind es dann schon zwei Leerzeichen, hehe)
interessant, dass hinter den Sekunden kein Leerzeichen gesetzt wurde (bzw. hinter set sek soundso)
my mistake, ich habe den Bug der Forensoftware nicht bedacht und glatt die sonst immer gesetzten Zollzeichen bei den
set var=wert
vergessen hinzuzufügen; habe dies nun nachgeholt.greetz André
@99045, ja ich denke, er ist sich sicher, denn die Forensoftware schiebt gerne noch ein Leerzeichen hinterher (kannst du auch im Code überprüfen ^_^ bei ihm sind es dann schon zwei Leerzeichen, hehe)
interessant, dass hinter den Sekunden kein Leerzeichen gesetzt wurde (bzw. hinter set sek soundso)
Hallo,
noch eine Anmerkung, bei unerwarteten Leerzeichen ist vermutlich der Leerspeicher übergelaufen
Um dies zu verhindern empfiehlt es sich Zuweisungen immer in Anführungszeichen zu setzen.
Also
Das vermeidet ein ungewolltes anhängen von Leerzeichen die (unsichtbar) hinter dem letzten % liegen könnten.
Bei der Variante mit Anführungszeichen wird nur alles bis zum letzten " in die Variable geschoben, was nach dem letzten " wird automatisch entfernt
Gruß
jeb
noch eine Anmerkung, bei unerwarteten Leerzeichen ist vermutlich der Leerspeicher übergelaufen
Um dies zu verhindern empfiehlt es sich Zuweisungen immer in Anführungszeichen zu setzen.
Also
set "monat=%date:~3,2%"
Das vermeidet ein ungewolltes anhängen von Leerzeichen die (unsichtbar) hinter dem letzten % liegen könnten.
Bei der Variante mit Anführungszeichen wird nur alles bis zum letzten " in die Variable geschoben, was nach dem letzten " wird automatisch entfernt
Gruß
jeb
[OT]
@Biber
Grüße
bastla
[/OT]
@Biber
Genauer gesagt, bei einer geraden Anzahl größer als 1.
Dass Du schon wieder alle schmutzigen Details verraten musst ... Grüße
bastla
[/OT]
@bastla, biber
Jaja ich habs gesehen und editiert
Aber genau genommen kommt es nur darauf an, dass vor dem Variabelnamen das erste Anführungszeichen ist,
dann gilt die Regel:
Es wird alles bis zum letzen Anführungszeichen genommen, aber das letzte gehört nicht mehr zum String.
Funktioniert also auch bei ungerader Anzahl
Grüße
jeb
Jaja ich habs gesehen und editiert
Aber genau genommen kommt es nur darauf an, dass vor dem Variabelnamen das erste Anführungszeichen ist,
dann gilt die Regel:
Es wird alles bis zum letzen Anführungszeichen genommen, aber das letzte gehört nicht mehr zum String.
Funktioniert also auch bei ungerader Anzahl
set "var1=ausgeglichen wie ich bin" ab hier wird alles geschluckt
set "var2=unausgeglichen wie eine "Frau" und dies hier wird auch geschluckt
echo #%var1%#
echo #%var2%#
-- OUTPUT ---
#ausgeglichen wie ich bin#
#unausgeglichen wie eine "Frau#
Grüße
jeb
Einen hätte ich da als Korinthenkacker auch noch:
Eine gerade Anzahl ist immer größer 1. Denn 0 ist eben keine Anzahl.
irgendwelche Einwände?