используя кавычки на командах c #, которые отправляют в cmd - PullRequest
0 голосов
/ 04 ноября 2018

Я много об этом искал, но нет примера для этой конкретной ситуации.

Я хочу сжать каталог, написанный в текстовом поле (dirdes), и показать вывод в расширенном текстовом поле (_output).

Вместо сжатия каталога, написанного в текстовом поле, он сжимает каталог bin.

private void button3_Click(object sender, EventArgs e)
{
    string dirdes1 = dirdes.Text;
    string strCmdText;
    strCmdText = "/C compact /c /s /a /i /exe:lzx '" + dirdes1 + " *'";
    Process lzx = new Process();
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    lzx.StartInfo.FileName = "cmd.exe";
    lzx.StartInfo.UseShellExecute = false;
    lzx.StartInfo.Arguments = strCmdText;
    lzx.StartInfo.RedirectStandardOutput = true;
    lzx.Start();
    _output.Text = lzx.StandardOutput.ReadToEnd();
}

Редактировать: Я думаю, что это ошибка цитаты. потому что каталог должен быть таким "C:\" не таким 'C:\'

1 Ответ

0 голосов
/ 04 ноября 2018

Я смешал названия текстовых полей в GUI ... Это стоило мне 24 часа! И я немного изменил код. ТЕПЕРЬ ЭТО РАБОТАЕТ

private void button3_Click(object sender, EventArgs e)
    {
        string dirdes1 = dirdes.Text;
        string strCmdText;
        string locationAddress;
        string cdCommand;
        string doCompress;
        locationAddress = dirdes1;
        cdCommand  = "/C " + "cd " + locationAddress;
        strCmdText = "compact /c /s /a /i /exe:lzx";
        doCompress = "/C " + strCmdText + " *";
        Process lzx = new Process();
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        lzx.StartInfo.FileName = "cmd.exe";
        lzx.StartInfo.UseShellExecute = false;
        lzx.StartInfo.WorkingDirectory = @locationAddress;
        lzx.StartInfo.Arguments = doCompress;
        lzx.StartInfo.RedirectStandardOutput = true;
        lzx.Start();
        _output.Text = lzx.StandardOutput.ReadToEnd();
        showCommand.Text = doCompress;

    }

некоторые переменные предназначены для тестирования вещей, не беспокойтесь о них

...