2011-02-24 10 views
12

Estoy tratando de escribir un archivo por lotes para ejecutar iterativamente un ejecutable compilado FORTRAN. Normalmente, uno iría al indicador de comando de Windows, escriba 'Model.exe'. Esto abriría una ventana de comando dos solicitando al usuario que escriba un nombre de archivo requerido directamente en la ventana de comandos en el indicador de dos.múltiple hacen los comandos en un bucle for: Haciendo eco de una cadena a un archivo y luego volver a dirigir a la ventana de comandos

Quiero escribir un archivo por lotes que hará este bit por mí, y también repetir este paso para que pueda ejecutar 10 simulaciones consecutivamente en lugar de tener que hacerlo a mano. Este tipo de operación de shell sería sencillo en Linux, pero no tengo esto disponible.

Mi pseudo código se vería así:

para/L %% correr en (1,1,10) no
(juego de Sim cadena = %% ejecutar
echo% str%>. entrada.txt
Model.exe < entrada.txt)

Se puede descomponerlo en los siguientes pasos:

  1. Un variable de ssign 'ejecutar' un valor. (Por ejemplo 1)
  2. Concatenate esto con una cadena ("SIM") para hacer una nueva variable, "SIM1"
  3. echo a un archivo de texto ("entrada.txt")
  4. Leer la variable "SIM1 "de archivo 'entrada.txt'
  5. ejecutable se va y hace su cosa.
  6. Repita los pasos 1 -> 5, pero con una nueva calle variable "Sim2", etc.

que puedo conseguir lo anterior a trabajar si uso conjunto str = SIM1 y luego echo esto directamente a " input.txt ", pero no puedo hacer que esto funcione como un bucle. ¿Me estoy perdiendo de algo?

Saludos,

Ben

+0

Permítanme darles la bienvenida a StackOverflow y recordar tres cosas que normalmente hacemos aquí: 1) al recibir ayuda, trate de darle demasiado ** ** responder a las preguntas en su área de especialización 2) [ 'Leer el FAQs'] (http://tinyurl.com/2vycnvr) 3) Cuando vea bien Q & A, votar a ellos [ 'usando la triangles' gris] (http://i.imgur.com/kygEP.png), ya que la credibilidad de la El sistema se basa en la reputación que obtienen los usuarios al compartir sus conocimientos. Asimismo, recuerda a aceptar la respuesta que resuelve mejor el problema, en su caso, [ 'presionando la marca de verificación sign'] (http://i.imgur.com/uqJeW.png) –

Respuesta

24

Uf, el tratamiento de la expansión de variables de cmd.exe es feo. Por lo tanto, es necesario "expansión retardada", de la siguiente manera:

setlocal enabledelayedexpansion 
for /L %%i in (1,1,10) do (
set str=Sim%%i 
echo !str! > input.txt 
Model.exe < input.txt) 
endlocal 

(Por supuesto, en este caso particular, usted podría decir echo Sim%%i > input.txt pero supongo que hay una buena razón por la que quiere ir a través de otra variable.)

+0

impresionante !! Muchas gracias, eso lo resolvió muy bien. –

+1

@Ben Si funcionó, considere aceptar, y finalmente votando la respuesta de Gareth. –

Cuestiones relacionadas