Laden...

Programm in cmd inkl. Parametern ausführen

Erstellt von mrennen vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.216 Views
M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 10 Jahren
Programm in cmd inkl. Parametern ausführen

Hallo zusammen,

da ich es leid bin immer von Hand osm.pbf Dateien über die cmd zu entpacken habe ich mir ein kleines Programm geschrieben bei welchem ich nun hänge.

Normalerweise starte ich eine cmd und tippe z.B. ein:

c:\osm\osmconvert.exe germany-latest.osm.pbf > germany.osm <ENTER>

das läuft dann eine ganze Zeit - je nach Dateigröße und ich habe die "entpackte" Datei germany.osm im gleichen Ordner liegen.

Unter C# habe ich mir nun einen kleinen Button zur Ordnerauswahl + Auflistung aller Dateien im gewählten Ordner in ein DataTable gebastelt. Das ganze dann noch schön in ein DataGridView und die Dateigröße vorher und den Zieldateinamen ermittelt - Schön siehts aus ...


            var dlg = new FolderBrowserDialog();

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                teOrdnerwahl.Text = dlg.SelectedPath;
                
                Fuellen();

                btnStart.Enabled = true;
            }

            DirectoryInfo ParentDirectory = new DirectoryInfo(teOrdnerwahl.Text);

            DataColumn col1 = dt.Columns.Add("Quelldatei", typeof(String));
            DataColumn col2 = dt.Columns.Add("Quelldatei in byte", typeof(Int64));
            DataColumn col3 = dt.Columns.Add("Zieldatei", typeof(String));
            DataColumn col4 = dt.Columns.Add("Zieldatei in byte", typeof(Int64));

            foreach (FileInfo f in ParentDirectory.GetFiles())
            {
                dt.Rows.Add(String.Format(@"{0}\{1}", teOrdnerwahl.Text, f.Name), f.Length, 
                    String.Format(@"{0}\{1}", teOrdnerwahl.Text, f.Name.Substring(0, f.Name.Length - 4).Replace("-latest", "")));
            }

            dgv.DataSource = dt;
            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

Jetzt zu meinem Problem:

Ein Klick auf den Button Start soll das DataTable durchlaufen und jede Datei automatisch "entpacken" so wie ich es manuell gemacht habe. Der folgende Quelltext funktioniert leider nicht, bringt aber auch keine Fehlermeldung (Wildes Blinken verschiedener cmd-Fenster durch auf- und zuklappen - das wars)


        private void btnStart_Click(object sender, EventArgs e)
        {
            String programm = String.Format(@"{0}\{1}", teOrdnerwahl.Text ,"osmconvert.exe");
            String parameter = String.Empty;

            for (Int32 i = 0; i < dgv.RowCount; i++)
            {
                dgv.Rows[i].DefaultCellStyle.BackColor = Color.Gray;

                parameter = String.Format(@"{0} >{1}", dt.Rows[i][0], dt.Rows[i][2]);

                Process.Start("cmd.exe", String.Format(@"/c {0} {1}", programm, parameter).Replace("\\", @"\"));
            }
        }

Was mache ich hier falsch???

4.942 Beiträge seit 2008
vor 10 Jahren

Verwende mal testweise "/k" anstatt "/c" (dann bleiben die cmd-Fenster offen und du siehst dann evtl. den Fehler).

M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 10 Jahren

ich habe mir eine MessageBox anzeigen lassen was der da versucht (siehe Dateianhang)

Ich bin den Pfad auch mal durchgegangen - die Dateien liegen wirklich an dem jeweiligen Ort 😦

4.942 Beiträge seit 2008
vor 10 Jahren

Hallo,

da dein Pfad Leerzeichen enthält mußt du den gesamten Pfad (incl. Dateinamen) in Anführungsstriche setzen.