Discussion:
Variablenproblem in Batch
(zu alt für eine Antwort)
Anselm Rapp
2012-08-25 14:40:52 UTC
Permalink
Hallo,

wer hilft mir bitte? Ich habe eine Batchdatei, in welcher ich eine
Variable an Robocopy übergeben will:

1 set RoboLogVz="C:\Users\Anselm\Konfigurationen + Logs\Robocopy\"
2 echo %RoboLogVz%
3 robocopy C:\temp D:\MISTKUEBEL *.* /E /R:1 /W:10 /MOVE /MINAGE:30
/LOG+:%RoboLogVz%robocopy.log /NP

echo gibt (inklusive Anführungszeichen) aus:

"C:\Users\Anselm\Konfigurationen + Logs\Robocopy\"

Robocopy meldet:

FEHLER: Ungültiger Parameter #9 : "/LOG+:C:\Users\Anselm\Konfigurationen
+ Logs\Robocopy"robocopy.log /NP"

Der Backslash vor dem zweiten Anführungszeichen kommt also nicht an und
im Verzeichnis C:\Users\Anselm\Konfigurationen + Logs wird eine Datei
Robocopyrobocopy.log erzeugt.

In meinen grauen Zellen taucht das Stichwort "Maskieren" auf, aber das
war's dann. Googeln hat mich nicht weitergebracht.

Das Verzeichnis "Konfigurationen + Logs" möchte ich nur ungern ohne
Leerzeichen umbenennen, weil da schon etliche Programme darauf zugreifen
und ich alles umkonfigurieren müsste.

Danke für Tipps,

Anselm
--
Bitte in der Newsgroup antworten.
Stefan Kanthak
2012-08-25 15:17:00 UTC
Permalink
Post by Anselm Rapp
Hallo,
wer hilft mir bitte? Ich habe eine Batchdatei, in welcher ich eine
Irrtum.
Die Variablen werden vom Kommandoprozessor ausgewertet.
Post by Anselm Rapp
1 set RoboLogVz="C:\Users\Anselm\Konfigurationen + Logs\Robocopy\"
GANZ schlechte Idee!
Je nach der zur Interpretation der Kommandozeilen-Argumente verwendeten
Systemschnittstelle oder Laufzeit-Bibliothek werden \ oder \" verschieden
interpretiert!
Ausserdem ist CMD.EXE keine UNIX-Shell, sprich: " (und einige weitere
Meta-Zeichen) werden nicht immer bei der Uebergabe der Argumente an das
Kommando entfernt.

Set RoboLogVz=%USERPROFILE%\Konfigurationen + Logs\Robocopy
Post by Anselm Rapp
2 echo %RoboLogVz%
3 robocopy C:\temp D:\MISTKUEBEL *.* /E /R:1 /W:10 /MOVE /MINAGE:30
/LOG+:%RoboLogVz%robocopy.log /NP
/LOG+:"%RoboLogVz%\robocopy.log" /NP

ABER: wieso schreibst Du nicht "C:\temp" und "D:\MISTKUEBEL" (denn "
um Pfadnamen schaden nie), und wieso kodierst Du beide Pfade fest ein?

ICH wuerde

/LOG+:"%USERPROFILE%\...+...\RoboCopy\RoboCopy.log" schreiben und
auf die Variable RoboLogVz ganz verzichten!

[...]

Stefan
[
--
Die unaufgeforderte Zusendung werbender E-Mails verstoesst gegen §823
Abs. 1 sowie §1004 Abs. 1 BGB und begruendet Anspruch auf Unterlassung.
Beschluss des OLG Bamberg vom 12.05.2005 (AZ: 1 U 143/04)
Anselm Rapp
2012-08-25 17:06:29 UTC
Permalink
Post by Stefan Kanthak
Post by Anselm Rapp
wer hilft mir bitte? Ich habe eine Batchdatei, in welcher ich eine
Irrtum.
Die Variablen werden vom Kommandoprozessor ausgewertet.
Yes, Sir.
Post by Stefan Kanthak
Post by Anselm Rapp
1 set RoboLogVz="C:\Users\Anselm\Konfigurationen + Logs\Robocopy\"
GANZ schlechte Idee!
Das bin ich von mir nicht anders gewöhnt. :-)
Post by Stefan Kanthak
Je nach der zur Interpretation der Kommandozeilen-Argumente verwendeten
Systemschnittstelle oder Laufzeit-Bibliothek werden \ oder \" verschieden
interpretiert!
Ausserdem ist CMD.EXE keine UNIX-Shell, sprich: " (und einige weitere
Meta-Zeichen) werden nicht immer bei der Uebergabe der Argumente an das
Kommando entfernt.
Mhm ...
Post by Stefan Kanthak
Set RoboLogVz=%USERPROFILE%\Konfigurationen + Logs\Robocopy
Post by Anselm Rapp
2 echo %RoboLogVz%
3 robocopy C:\temp D:\MISTKUEBEL *.* /E /R:1 /W:10 /MOVE /MINAGE:30
/LOG+:%RoboLogVz%robocopy.log /NP
/LOG+:"%RoboLogVz%\robocopy.log" /NP
ABER: wieso schreibst Du nicht "C:\temp" und "D:\MISTKUEBEL" (denn "
um Pfadnamen schaden nie),
Das wusste ich nicht, danke.
Post by Stefan Kanthak
und wieso kodierst Du beide Pfade fest ein?
Du meinst NICHT fest ein?
Post by Stefan Kanthak
ICH wuerde
/LOG+:"%USERPROFILE%\...+...\RoboCopy\RoboCopy.log" schreiben und
auf die Variable RoboLogVz ganz verzichten!
Da haben mich schon nach meinem und vor Deinem Posting Selbstzweifel
ergriffen. Eine Batchdatei ruft ein halbes Dutzend weiterer Batchdateien
auf. Ich habe noch gar nicht probiert, weiß also nicht, ob eine in der
Hauptdatei gesetzte Variable von den Unterdateien übernommen wird. Wenn
ja, ist das trotzdem nicht so toll, weil ich manchmal Unterdateien
separat starte, und dann brauchen sie den Pfad ohnehin.

Ich bin auf die Idee gekommen, weil ich die Verzeichnisse verschieben
musste. Ich wollte mir ersparen, alle Pfade zu Robocopy in solchen
Fällen einzeln anzupassen. Wenn ich natürlich bedenke, wie oft solches
Verschieben vorkommt, dann sind feste Pfade wohl das kleinere Übel. Das
mache ich jetzt so.

Abgesehen davon hat mich aber interessiert, warum das mit den Variablen
nicht hinhaut. Hin und wieder kreiere ich wohl auch künftig Batchdateien.

Dank und Gruß, Anselm
--
Bitte in der Newsgroup antworten.
Stefan Kanthak
2012-08-25 17:45:09 UTC
Permalink
[...]
Post by Anselm Rapp
Post by Stefan Kanthak
Post by Anselm Rapp
3 robocopy C:\temp D:\MISTKUEBEL *.* /E /R:1 /W:10 /MOVE /MINAGE:30
und wieso kodierst Du beide Pfade fest ein?
Du meinst NICHT fest ein?
Nein. Ich beziehe mich auf C:\temp und D:\MISTKUEBEL
Post by Anselm Rapp
Post by Stefan Kanthak
ICH wuerde
/LOG+:"%USERPROFILE%\...+...\RoboCopy\RoboCopy.log" schreiben und
auf die Variable RoboLogVz ganz verzichten!
Da haben mich schon nach meinem und vor Deinem Posting Selbstzweifel
ergriffen. Eine Batchdatei ruft ein halbes Dutzend weiterer Batchdateien
auf. Ich habe noch gar nicht probiert, weiß also nicht, ob eine in der
Hauptdatei gesetzte Variable von den Unterdateien übernommen wird.
Sie wird!
Denk zurueck an MS-DOS und dessen AUTOEXEC.BAT: dort hast Du PATH= etc.
gesetzt, und diese Variablen waren danach fuer alle Programme verfuegbar.

Umgekehrt gilt das aber auch: wenn Du den Wert einer Variablen in einer
untergeordneten Batch-Datei aenderst, dann siehst Du den geaenderten
Wert spaeter auch in der Hauptdatei... es sei denn, Du verwendest in
der untergeordneten Datei SETLOCAL

Stefan
[
--
Die unaufgeforderte Zusendung werbender E-Mails verstoesst gegen §823
Abs. 1 sowie §1004 Abs. 1 BGB und begruendet Anspruch auf Unterlassung.
Beschluss des OLG Bamberg vom 12.05.2005 (AZ: 1 U 143/04)
Anselm Rapp
2012-08-25 19:50:27 UTC
Permalink
Post by Stefan Kanthak
Post by Anselm Rapp
Post by Stefan Kanthak
und wieso kodierst Du beide Pfade fest ein?
Du meinst NICHT fest ein?
Nein. Ich beziehe mich auf C:\temp und D:\MISTKUEBEL
Ach ja - weil diese beiden Pfade sicher unverändert bleiben.
Post by Stefan Kanthak
Post by Anselm Rapp
Da haben mich schon nach meinem und vor Deinem Posting Selbstzweifel
ergriffen. Eine Batchdatei ruft ein halbes Dutzend weiterer Batchdateien
auf. Ich habe noch gar nicht probiert, weiß also nicht, ob eine in der
Hauptdatei gesetzte Variable von den Unterdateien übernommen wird.
Sie wird!
Denk zurueck an MS-DOS und dessen AUTOEXEC.BAT: dort hast Du PATH= etc.
gesetzt, und diese Variablen waren danach fuer alle Programme verfuegbar.
Ja, natürlich!
Post by Stefan Kanthak
Umgekehrt gilt das aber auch: wenn Du den Wert einer Variablen in einer
untergeordneten Batch-Datei aenderst, dann siehst Du den geaenderten
Wert spaeter auch in der Hauptdatei... es sei denn, Du verwendest in
der untergeordneten Datei SETLOCAL
Mit Deiner Hilfe werde ich immer schlauer, nur nicht so schlau wie Du. ;-)

Dank und Gruß, Anselm
--
Bitte in der Newsgroup antworten.
Ralf Breuer
2012-08-25 15:18:54 UTC
Permalink
Post by Anselm Rapp
1 set RoboLogVz="C:\Users\Anselm\Konfigurationen + Logs\Robocopy\"
2 echo %RoboLogVz%
3 robocopy C:\temp D:\MISTKUEBEL *.* /E /R:1 /W:10 /MOVE /MINAGE:30
/LOG+:%RoboLogVz%robocopy.log /NP
Versuche mal (ungetestet):

set RoboLogVz=C:\Users\Anselm\Konfigurationen + Logs\Robocopy\
echo %RoboLogVz%
robocopy C:\temp D:\MISTKUEBEL *.* /E /R:1 /W:10 /MOVE /MINAGE:30
/LOG+:"%RoboLogVz%robocopy.log" /NP
--
Gruß
Ralf
Anselm Rapp
2012-08-25 17:10:23 UTC
Permalink
Post by Ralf Breuer
Post by Anselm Rapp
1 set RoboLogVz="C:\Users\Anselm\Konfigurationen + Logs\Robocopy\"
2 echo %RoboLogVz%
3 robocopy C:\temp D:\MISTKUEBEL *.* /E /R:1 /W:10 /MOVE /MINAGE:30
/LOG+:%RoboLogVz%robocopy.log /NP
set RoboLogVz=C:\Users\Anselm\Konfigurationen + Logs\Robocopy\
echo %RoboLogVz%
robocopy C:\temp D:\MISTKUEBEL *.* /E /R:1 /W:10 /MOVE /MINAGE:30
/LOG+:"%RoboLogVz%robocopy.log" /NP
Funktioniert, danke! Im konkreten Fall werde ich nun doch fest
"verdrahten", siehe meine Antwort an Stefan Kanthak, aber anderweitig
werde ich das sicher mal brauchen können.

Gruß, Anselm
--
Bitte in der Newsgroup antworten.
Heiko Rost
2012-08-25 15:19:04 UTC
Permalink
Post by Anselm Rapp
1 set RoboLogVz="C:\Users\Anselm\Konfigurationen + Logs\Robocopy\"
2 echo %RoboLogVz%
3 robocopy C:\temp D:\MISTKUEBEL *.* /E /R:1 /W:10 /MOVE /MINAGE:30
/LOG+:%RoboLogVz%robocopy.log /NP
"C:\Users\Anselm\Konfigurationen + Logs\Robocopy\"
FEHLER: Ungültiger Parameter #9 : "/LOG+:C:\Users\Anselm\Konfigurationen
+ Logs\Robocopy"robocopy.log /NP"
Du kannst die "" vom set zu robocopy verschieben:

set RoboLogVz=C:\Users\Anselm\Konfigurationen + Logs\Robocopy\
echo %RoboLogVz%
robocopy C:\temp D:\MISTKUEBEL *.* /E /R:1 /W:10 /MOVE /MINAGE:30 /LOG+:"%RoboLogVz%robocopy.log" /NP

Gruß Heiko
Anselm Rapp
2012-08-25 17:12:03 UTC
Permalink
Post by Ralf Breuer
set RoboLogVz=C:\Users\Anselm\Konfigurationen + Logs\Robocopy\
echo %RoboLogVz%
robocopy C:\temp D:\MISTKUEBEL *.* /E /R:1 /W:10 /MOVE /MINAGE:30 /LOG+:"%RoboLogVz%robocopy.log" /NP
Danke auch Dir. Eine Minute später als Ralf Breuer. :-)

Gruß, Anselm
--
Bitte in der Newsgroup antworten.
Loading...