2012-10-10 35 views
6

Soy un chico de Unix pero tengo que escribir un sistema en Windows, y estoy tratando de escribir un script para mover algunos archivos. Estoy tratando de tener el archivo por lotes de los padres llamar a un archivo por lotes niño que contiene:¿Es posible generar un archivo por lotes en el cmd de Windows como lo hace en Unix?

set REPORTFILE=c:\report.txt 

y luego quiero que el padre sea capaz de utilizar la variable% REPORTFILE%. Aparentemente el comando CALL crea un nuevo contexto. En Unix, acaba de fuente de la secuencia de comandos, ¿es posible en Windows?

+1

ahora Estoy pensando que puedo hacer algún truco como en unix REPORTFILE = 'cat filewithname.txt'. (hacer creer que esos son marcadores) ¿Hay un equivalente de eso en Windows? – stu

+0

ahhhh ... ¿es esto? set/p REPORTFILE = stu

+1

CALL no crea un nuevo contexto a menos que el script/rutina invocados emita SETLOCAL. Debería mostrar un ejemplo completo (maestro e hijo) que cree que está fallando. Sospecho que puede estar llamando y estableciendo el valor entre paréntesis, lo que requeriría demoras en la expansión. – dbenham

Respuesta

8

si entiendo ... esto parece funcionar para mí en Vista:

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> persona que llama

C: \ temp> echo esta es la persona que llama

esta es la persona que llama

C: \ temp> echo valor inicial es:

valor inicial es:

C: \ temp> llamar setter.bat

C: \ temp> eco este es el valor setter

este es el valor setter

C: \ temp> set reportfile = c: \ report.txt

C: \ temp> valor de eco es: c: \ report.txt

valor es: c: \ report.txt

actualizado para utilizar Goto en lugar de parens:

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

Sí, eso no funciona para mí en XP. Si ejecuta ese script y luego configura el archivo de informe, ¿qué obtiene? Descubrí que la variable se estableció en el contexto de mi llamada, pero no en el script. – stu

+0

reportfile = c: \ report.txt ... después de "establecer el archivo de informe" para mí – Stanley

+0

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

Cuestiones relacionadas