2012-10-10 4 views
6

Ich bin ein Unix-Typ, aber ich muss ein System in Windows schreiben, und ich versuche, ein Skript zu schreiben, um einige Dateien zu verschieben. Ich versuche, die übergeordnete Batch-Datei zu haben, ein Kind Batch-Datei aufrufen, die enthält:Ist es möglich, eine Batch-Datei in Windows cmd wie in Unix zu erhalten?

set REPORTFILE=c:\report.txt 

und dann möchte ich die Eltern der Lage sein, die% REPORT% Variable zu verwenden. Offensichtlich erstellt der Befehl CALL einen neuen Kontext. In Unix, beziehen Sie nur das Skript, ist das in Windows möglich?

+1

jetzt Ich denke, ich kann einen Trick wie in Unix REPORTFILE = 'cat filewithname.txt' tun. (Stellen Sie sich vor, dass es sich um Backticks handelt) Gibt es ein Äquivalent dazu in Windows? – stu

+0

ahhhh ... ist das das? set/p REPORTFILE = stu

+1

CALL erstellt keinen neuen Kontext, es sei denn, das aufgerufene Skript/die Routine gibt SETLOCAL aus. Sie sollten ein vollständiges Beispiel (Master und Child) anzeigen, das Ihrer Meinung nach fehlschlägt. Ich vermute, dass Sie anrufen und den Wert in Klammern setzen, was eine verzögerte Erweiterung erfordern würde. – dbenham

Antwort

8

wenn ich verstehe ... das scheint mir in Vista zu arbeiten:

caller.bat

echo this is the caller 
echo initial value is: %reportfile% 
call setter.bat 
echo value is: %reportfile% 

setter.bat

echo this is the value setter 
set reportfile=c:\report.txt 

C: \ temp> Anrufer

C: \ temp> echo dies ist der Anrufer

Diese

ist der Anrufer

C: \ temp> echo Anfangswert ist:

Anfangswert ist:

C: \ temp> rufen setter.bat

C: \ temp> echo dies der Wert setter

dies ist, ist der Wert setter

C: \ temp> Report = c: \ report.txt

C: \ temp> echo Wert: c: \ report.txt

Wert ist: c: \ report.txt

aktualisiert goto verwenden anstelle von Pars:

if not exist file.txt goto doit 
goto notfound 
:doit 
echo this is the caller 
echo initial value is: %reportfile% 
call setter.bat 
echo value is: %reportfile% 
goto end 
:notfound 
echo file found 
:end 
+0

Ja, das funktioniert nicht für mich in XP. Wenn Sie das Skript ausführen und dann die Berichtsdatei einstellen, was bekommen Sie? Ich habe festgestellt, dass die Variable in meinem Aufrufkontext, aber nicht im Skript festgelegt wurde. – stu

+0

report = c: \ report.txt ... nach „set report“ für mich – Stanley

+0

try: c: \> rufen caller.bat – Stanley

Verwandte Themen