diff --git a/Common/Gmsh.cpp b/Common/Gmsh.cpp
index 0f86c96b1428d72cb3f05f606691f024a7df6b09..347dd118fabed400cae012f128522c9cec97c3d5 100644
--- a/Common/Gmsh.cpp
+++ b/Common/Gmsh.cpp
@@ -347,6 +347,17 @@ int GmshBatch()
   return 1;
 }
 
+int GmshBatch(int argc, char **argv)
+{
+  new GModel();
+  GmshInitialize(argc, argv);
+  if(!Msg::GetGmshClient()) CTX::instance()->terminal = 1;
+  CTX::instance()->noPopup = 1;
+  GmshBatch();
+  GmshFinalize();
+  return 1;
+}
+
 int GmshFLTK(int argc, char **argv)
 {
 #if defined(HAVE_FLTK) && defined(HAVE_POST)
diff --git a/Common/Gmsh.h b/Common/Gmsh.h
index 2a29eacac6aac6d5d5643024735916fc91585971..abbd644b71cccbce3124077a8c53642d2e791222 100644
--- a/Common/Gmsh.h
+++ b/Common/Gmsh.h
@@ -47,6 +47,7 @@ int GmshMergePostProcessingFile(const std::string &fileName);
 int GmshWriteFile(const std::string &fileName);
 int GmshFinalize();
 int GmshBatch();
+int GmshBatch(int argc, char **argv);
 int GmshFLTK(int argc=0, char **argv=0);
 
 #endif