2011-02-24 18 views
12

Yinelemeli bir fortran derlenmiş yürütülebilir dosyasını yürütmek için bir toplu iş dosyası yazmaya çalışıyorum. Normalde bir kişi Windows komut istemine gider, 'Model.exe' yazın. Bu, dosdoğrudan komut penceresinde doğrudan istenen bir dosya adını yazmasını isteyen kullanıcıdan bir dos komut penceresi getirir.Birden çok for döngüsünde komutlar yapın: Bir dizgiyi bir dosyaya ekleme ve sonra da komut penceresine yeniden yönlendirme

Bu işi benim için yapacak bir toplu iş dosyası yazmak istiyorum ve bu adımı yinelemeliyim, böylece el ile yapmak yerine 10 simülasyonu arka arkaya çalıştırabilirim. Bu tür kabuk operasyonu linux içinde basit olurdu, ancak bu mevcut değil.
(set str = Sim
yankı çalıştırmak %% do in (1,1,10) çalıştırmak %%

için/L% str%>:

Benim sahte kod şu şekilde görünecektir. girdi.txt
Model.exe < girdi.txt)

aşağıdaki adımlara bu yıkmak olabilir

:

  1. A ssign değişken 'çalıştırmak' bir değer. (Örneğin 1)
  2. yeni bir değişken, "SIM1"
  3. yapmak için bir dize ("Sim") ile
  4. Concatenate bu bir metin dosyası ("girdi.txt")
  5. değişkeni oku "SIM1 bu yankı "dosyadan" input.txt "
  6. Yürütülebilir ve gider. "> 5, fakat vb

yeni değişken calle "SIM2" ile ben set str = sim1 kullanırsanız çalışmak için yukarıdaki alabilir ve daha sonra doğrudan bu yankı -

  • tekrarlayın aşamaları 1 input.txt ", ancak bunu bir döngü olarak çalışamıyorum. Bir şey mi eksik?

    Saygılarımızla,

    Ben

  • +0

    Seni StackOverflow'a davet etmemize ve genellikle burada yaptığımız üç şeye hatırlatmama izin verin: 1) Yardım aldığınız zaman, uzmanlık alanınızda ** soruları yanıtlamaya ** çalışın 2) ['SSS'leri okuyun] (http://tinyurl.com/2vycnvr) 3) İyi bir Soru & Cevap gördüğünüzde, [gri üçgenleri kullanarak] onları [http://i.imgur.com/kygEP.png], Sistem, kullanıcıların bilgilerini paylaşarak kazandığı itibara dayanmaktadır. Ayrıca, sorununuzu daha iyi çözen cevabı kabul etmeyi unutmayın, eğer varsa, ['onay işaretine basarak'] (http://i.imgur.com/uqJeW.png) –

    cevap

    24

    Ugh, değişken genişleme cmd.exe'yi muamelesinin çirkin. aşağıdaki gibi Yani, "gecikmeli genişleme" gerekir:

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

    (bu özel durumda Tabii sadece echo Sim%%i > input.txt söyleyebiliriz ama başka değişkeni üzerinden gitmek istediğiniz bir nedeni var varsayıyorum.)

    +0

    Awesome !! Teşekkürler bir demet, bu gerçekten çok iyi çözüldü. –

    +1

    @Ben Çalışırsa, Gareth'ın cevabını kabul etmeyi ve sonuç olarak üstlenmeyi düşünün. –