Есть несколько методов, но обычно проще всего создать пакетный файл со всеми командами, которые вы хотите, чтобы выполнить то, что передать в качестве параметра cmd
.
Что-то вроде этого:
string imageFolder = @"C:\Path\To\Images";
string batchFile = @"C:\Temp\cmds.cmd";
string outputFile = @"C:\Temp\cmds.log";
// substitute your own command here. "{0}" will be substituted for filename
string command = @"attrib ""{0}"" >> """ + outputFile + @"""";
// delete the batch file if it exists
if (File.Exists(batchFile))
File.Delete(batchFile);
// create batch file from content of image folder
using (var writer = File.CreateText(batchFile))
{
writer.WriteLine("@echo off");
foreach (var file in Directory.EnumerateFiles(imageFolder, "*.jpg"))
writer.WriteLine(command, file);
}
// Delete the output file if it exists
if (File.Exists(outputFile))
File.Delete(outputFile);
// Execute the batch
var p = Process.Start("cmd", @"/c """ + batchFile + @"""");
p.WaitForExit();
После этого завершает вы можете захватить содержимое выходного файла и разобрать его результатов. Если вам нужен перерыв между выходами, просто выделите что-то своеобразное между каждым. Может быть, что-то вроде:
// create batch file from content of image folder
using (var writer = File.CreateText(batchFile))
{
writer.WriteLine("@echo off");
foreach (var file in Directory.EnumerateFiles(imageFolder, "*.jpg"))
{
writer.WriteLine(@"echo -----Start: {0}>>""{1}""", file, outputFile);
writer.WriteLine(command, file);
writer.WriteLine(@"echo -----End: {0}>>""{1}""", file, outputFile);
}
}
Таким образом вы также получите имя файла на выходе, чтобы помочь разобрать.
Другой вариант - использовать перенаправление полного потока для потоков, с которых вы можете писать команды и читать ответы. Это позволит вам запускать командную строку где-то в фоновом режиме, для которой вы можете выдавать команды. Кажется простым, но, честно говоря, требуется очень много работы, чтобы все было в порядке. Если вы хотите пойти таким путем, я бы предложил перенаправить все три стандартных потока.
Спасибо! Это работает очень хорошо! Просто быстрый вопрос: почему «@» tesseract «" {0} "" "" "+ outputFile + @" "" ";' вместо более короткого '@" tesseract {0} "+ outputFile;'? Я вижу, что в вашем формате написано много кодов и всегда задавались вопросом, почему. –
Чтобы вы могли использовать пробелы в имени файла, если хотите, для исходных или выходных файлов. – Corey