Выполнение пакетного файла с зависимостью пути в c #

1

У меня есть файл bat, который копирует файлы из одного каталога в другой. Если этот файл bat щелкнут вручную, файлы будут скопированы успешно и никаких проблем с этим. Но если файл bat выполняется через С#, в окне cmd отображается сообщение "файлы не найдены".

Вот мой bat файл.

echo off 
echo. 
XCOPY "..\SourceFolder\CaSourceFile" "..\DestinationFolder\SubFolder" /r /Y /i /F

если полный путь указан в файле bat, то файлы копируются успешно. пример,

XCOPY "D:\RootFolder\SourceFolder\CaSourceFile" "D:\RootFolder\DestinationFolder\SubFolder" /r /Y /i /F

Мой код С#:

ProcessStartInfo processInfo = new ProcessStartInfo(batchFile);
                processInfo.UseShellExecute = true;
                Process batchProcess = new Process();
                batchProcess.StartInfo.FileName = "cmd.exe";
                batchProcess.StartInfo = processInfo;
                batchProcess.StartInfo.Arguments = String.Format("\"{0}\" \"{1}\"", @"D:\Europa\Test Release Tool\SingleExeInstaller\EuropaApplication", @"D:\Europa\Test Release Tool\SingleExeInstaller\EuropaInstaller");
                batchProcess.StartInfo.RedirectStandardInput = true;
                batchProcess.StartInfo.RedirectStandardOutput = true;
                batchProcess.StartInfo.RedirectStandardError = true;
                batchProcess.Start();
                batchProcess.WaitForExit();

Мое приложение exe доступно в C: и файл bat доступен в D: Есть ли какие-либо идеи для этой проблемы? Пожалуйста, помогите мне.

Теги:
batch-file

4 ответа

2

Пути, которые вы пытаетесь использовать, - это относительные пути, вопрос в том, каковы они относительно.

Когда вы запускаете файл bat из командной строки, они будут относиться к текущему каталогу, который вы установили с помощью команды cd, и, скорее всего, это каталог, в котором находится ваш.bat файл. Когда вы запускаете летучую мышь из вашего EXE файла С# текущим каталогом будет каталог, в котором находится ваш exe файл.

Текущий каталог также известен как WorkDirectory. Для того, чтобы использовать другой каталог попробуйте установить WorkingDirectory свойства на объекте ProcessStartInfo.

2

Вам нужно установить WorkingDirectory в StartInfo; из-за этого ваши относительные пути в пакетном файле отключены. Вероятно, это должен быть путь к пакетному файлу.

batchProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(batchFile);
1

Я ожидаю, что вам нужно установить рабочий каталог в каталог StartInfo See .NET Process.Start по умолчанию?

0

Легче скопировать файлы из одной папки в другую с помощью С#.

Простой пример:

using System.IO;

string sourcePath = "C:\test";
string targetPath = "D:\test_new";
if (!Directory.Exists(targetPath)) {
Directory.CreateDirectory(targetPath);
}
foreach (var srcPath in Directory.GetFiles(sourcePath)) {
//Copy the file from sourcepath and place into mentioned target path, 
//Overwrite the file if same file is exist in target path
File.Copy(srcPath, srcPath.Replace(sourcePath, targetPath), true);
}

Подробнее о file.copy вы можете найти на MSDN, как обычно))) - http://msdn.microsoft.com/en-us/library/system.io.file.copy.aspx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню