У меня есть файл 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: Есть ли какие-либо идеи для этой проблемы? Пожалуйста, помогите мне.
Пути, которые вы пытаетесь использовать, - это относительные пути, вопрос в том, каковы они относительно.
Когда вы запускаете файл bat из командной строки, они будут относиться к текущему каталогу, который вы установили с помощью команды cd, и, скорее всего, это каталог, в котором находится ваш.bat файл. Когда вы запускаете летучую мышь из вашего EXE файла С# текущим каталогом будет каталог, в котором находится ваш exe файл.
Текущий каталог также известен как WorkDirectory. Для того, чтобы использовать другой каталог попробуйте установить WorkingDirectory свойства на объекте ProcessStartInfo.
Вам нужно установить WorkingDirectory
в StartInfo
; из-за этого ваши относительные пути в пакетном файле отключены. Вероятно, это должен быть путь к пакетному файлу.
batchProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(batchFile);
Я ожидаю, что вам нужно установить рабочий каталог в каталог StartInfo See .NET Process.Start по умолчанию?
Легче скопировать файлы из одной папки в другую с помощью С#.
Простой пример:
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