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

Einfache Batch-Datei funktinoert nicht mehr wg Syntaxfehler

Frage Entwicklung Batch & Shell

Mitglied: asd333

asd333 (Level 1) - Jetzt verbinden

07.04.2011, aktualisiert 13:08 Uhr, 4412 Aufrufe, 18 Kommentare

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.
Mitglied: Skyemugen
07.04.2011 um 10:40 Uhr
Aloha,

ganz einfach, vor 10 Uhr bekommst du als std Leerzeichen+Stundenzahl ...

greetz André
Bitte warten ..
Mitglied: asd333
07.04.2011 um 10:45 Uhr
Lieber André,

vielen Dank für Deine Antwort. Das scheint mir logisch, dass das dann nicht zu verarbeiten ist.
Gibt es da einen workaround, damit dennoch ein Dateiname mit Zeitstempel des Kopiervorgangs erstellt werden kann, 24 Std. am Tag?

Beste Grüße,
Andreas
Bitte warten ..
Mitglied: 99045
07.04.2011 um 10:48 Uhr
Zitat von asd333:
Was mache ich falsch?

Hallo und Willkommen im Forum.

Kleiner Tipp zur Fehlersuche:
fang mal mit
01.
@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ß
Bitte warten ..
Mitglied: Skyemugen
07.04.2011 um 10:57 Uhr
Aloha,

klar:

01.
set "jahr=%date:~-4%" 
02.
set "monat=%date:~3,2%" 
03.
set "tag=%date:~0,2%" 
04.
 
05.
if %time:~0,2% lss 10 (set "std=0%time:~1,1%") else (set "std=%time:~0,2%") 
06.
set "min=%time:~3,2%" 
07.
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)
Bitte warten ..
Mitglied: asd333
07.04.2011 um 11:13 Uhr
Vielen Dank euch beiden, das hätte ich alleine niemals hinbekommen.
@99045: Werde mir beides merken, vielen Dank!
Bitte warten ..
Mitglied: Skyemugen
07.04.2011 um 11:15 Uhr
Aloha,

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é
Bitte warten ..
Mitglied: asd333
07.04.2011 um 13:15 Uhr
Hallo,

habe nun alles genauso eingetragen, dennoch erscheint in dieser Zeile ein Syntaxfehler aufgrund von Leerzeichen.

01.
copy %datei% %zielprefix%%jahr%-%monat%-%tag%-%std%-%min%-%sek%-Text.doc
nämlich: Ursprungsordner>copy Urpsrungsdatei Zieltordner\2011 -04 -07 -13-09 -44-Text.doc Syntaxfehler.

Hier nochmal der ganze Code:

01.
@echo off 
02.
set datei=c:\Users\Andreas\Desktop\Text\Alles\Struktur.doc 
03.
set zielprefix=c:\Users\Andreas\Desktop\Text\Alles\Backups\ 
04.
set zielext=doc 
05.
 
06.
set jahr=%date:~-4%  
07.
set monat=%date:~3,2%  
08.
set tag=%date:~0,2%  
09.
 
10.
if %time:~0,2% lss 10 (set std=0%time:~1,1%) else (set std=%time:~0,2%)  
11.
set min=%time:~3,2%  
12.
set sek=%time:~6,2% 
13.
 
14.
copy %datei% %zielprefix%%jahr%-%monat%-%tag%-%std%-%min%-%sek%-Text.doc 
15.
start %datei%
Bitte warten ..
Mitglied: 99045
07.04.2011 um 13:33 Uhr
Hi,

Zitat von asd333:
habe nun alles genauso eingetragen, dennoch erscheint in dieser Zeile ein Syntaxfehler aufgrund von Leerzeichen.
01.
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.
01.
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ß
Bitte warten ..
Mitglied: Skyemugen
07.04.2011 um 13:44 Uhr
Aloha,

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)
Bitte warten ..
Mitglied: asd333
07.04.2011 um 13:47 Uhr
Hallo,
ja, Leerzeichen stehen zwischen Jahr, Monat, Tag und Minute ein Leerzeichen.
Da das aber ein rein kosmetisches Problem ist, wenn man die Dateinamen in "" setzt, passt das.
Mich wunderte es nur, vor allem, weil es bei Stunden und Sekunden nicht der Fall ist.
Aber gut, ich bin zufrieden, das erleichtert mir sooo viel Arbeit. Vielen Dank.
Andreas
Bitte warten ..
Mitglied: jeb-the-batcher
07.04.2011 um 15:09 Uhr
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
01.
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
Bitte warten ..
Mitglied: asd333
07.04.2011 um 15:19 Uhr
Herzlichen Dank für euere Mühen, mit den Leerzeichen hat alles geklappt und ich steig jetzt bei Batch&Shell voll durch. ;)
Grüße,
Andreas
Bitte warten ..
Mitglied: bastla
07.04.2011 um 16:59 Uhr
@jeb
Funktioniert noch besser bei Verwendung einer geraden Anzahl von Anführungszeichen ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
07.04.2011 um 17:05 Uhr
@bastla
Zitat von bastla:
@jeb
Funktioniert noch besser bei Verwendung einer geraden Anzahl von Anführungszeichen ...
Genauer gesagt, bei einer geraden Anzahl größer als 1.
Nun aber genug der versteckten Hinweise...

Grüße
Biber
Bitte warten ..
Mitglied: bastla
07.04.2011 um 17:11 Uhr
[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]
Bitte warten ..
Mitglied: jeb-the-batcher
07.04.2011 um 17:11 Uhr
@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

01.
set "var1=ausgeglichen wie ich bin"  ab hier wird alles geschluckt 
02.
set "var2=unausgeglichen wie eine "Frau" und dies hier wird auch geschluckt 
03.
echo #%var1%# 
04.
echo #%var2%# 
05.
-- OUTPUT --- 
06.
#ausgeglichen wie ich bin# 
07.
#unausgeglichen wie eine "Frau#
Grüße
jeb
Bitte warten ..
Mitglied: jeb-the-batcher
07.04.2011 um 17:18 Uhr
Und weils so schön ist, noch ein weiteres offensichtliches Beispiel

01.
setlocal DisableDelayedExpansion 
02.
set "var1=#a^" 
03.
set "var2=#^" ! 
04.
setlocal EnableDelayedExpansion 
05.
set "var3=#^" 
06.
set "var4=#^" ! 
07.
 
08.
set var 
09.
--- OUTPUT --- 
10.
var1=#^ 
11.
var2=#^ 
12.
var3=#^ 
13.
var4=#
Man beachte var4

Gruß
jeb
Bitte warten ..
Mitglied: 99045
07.04.2011 um 17:21 Uhr
Zitat von Biber:
Genauer gesagt, bei einer geraden Anzahl größer als 1.

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?
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
Ä in batch Datei (12)

Frage von BergEnte zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...