2017-09-25 154 views
0

我需要按順序運行使用多個特定於站點的輸入文件的模型,爲每個站點創建一個輸出數據文件,將輸出文件移動到結果文件夾並擦除之前的輸入文件,下一輪。r自動修改批處理文件

我使用下面的windows批處理文件進行運行。目前,我必須手動修改每個站點的路徑和文件名。因爲我想通過不同的站點順序運行它,所以修改它會很好,所以輸入和輸出文件和路徑將自動從包含每個站點所有信息的.csv中設置。

是否有可能創建一個R代碼來自動開發所有.bat文件並按順序加載它們?

@REM Remove old output files 
erase *.bin 
erase *.lis 
erase *.out 

copy "C:\Users\fix\site7_fix.100" "C:\Users\fix.100" 
copy "C:\Users\sitepar\site7_sitepar.in" "C:\Users\sitepar.in" 
copy "C:\Users\sch\sch1_spinup\site7.sch" "C:\Users\." 
copy "C:\Users\wth\site7.wth" "C:\Users\site.wth" 
copy "C:\Users\soils_in\site7_soils.in" "C:\Users\soils.in" 
copy "C:\Users\site\site7.100" "C:\Users\site.100" 

@REM Run the spinup simulation 
erase *.log 

model_mlp -s site7 -n site7_spin > site7_spin_log.txt 
model_mlp_list100 site7_spin site7_spin outvars.txt 

copy site7_spin.lis "C:\Users\output\spinup\vveg_spin.txt" 
@REM copy summary.out "C:\Users\output\spinup\site7_summary_spin.txt" 
copy site7_spin_log.txt "C:\Users\logs\site7_spin_log.txt" 
@REM copy methane.out "C:\Users\output\spinup\site7_spin_ch4.txt" 

erase site.100 
erase site.wth 
erase site7_spin.sch 
erase *log* 

或者,是否有可能直接修改批處理文件以按順序通過不同的站點運行?

回答

1

下面是如何從數據框中創建批處理文件的通用示例,該數據框可以從csv文件讀入。

df <- data.frame(MyParamater1 = c('This.bat', 'That.bat'), 
      MyParamater2 = c('Thing1', 'thing2'), 
      stringsAsFactors = F) 


for (i in 1:length(df$MyParamater1)) { 
    fileConn <- file(df$MyParamater1[i]) 
    writeLines(c("Hello", 
       paste0("Change to", df$MyParamater2[i]), " Site7"), fileConn) 
    close(fileConn) 
} 

作爲替代方案,您還可以讀取現有文件並替換值。這是一個普通的例子:

shell.exec("MyNewBat.bat") 

#Read File in 
fileConn <- file("This.bat") 
myNewBat <- readLines(fileConn) 
close(fileConn) 

#Replace Values 
myNewBat <- gsub("Site7", "Site8", myNewBat) 

#Write new file 
fileConn <- file("MyNewBat.bat") 
writeLines(myNewBat, file("fileConn")) 
close(fileConn) 

然後你就可以與R直接執行批處理文件