批处理文件在 运行 时有效,但在应用程序 运行 时失败
Batch File works when run, but fails when run from app
我有一个批处理文件,如下所示:
@echo off
REM Create the folder to put the converted files in
md PngConverted
REM Iterate all bitmap files
for /r %%F in (*.bmp) do (
REM Convert the files to PNG. Resize them so they are no bigger than 1300x1300
REM Also limit to 250 colors.
convert -resize 1300x1300 -colors 250 "%%~nF%%~xF" ".\PngConverted\%%~nF.png"
REM Output to the user that we completed this file.
echo converted %%~nF%%~xF to png
)
它使用 ImageMagick 转换和调整一堆图像的大小。
如果我只是双击它,效果很好。运行没有错误并输出我转换后的图像。
但是,我试图将它放入这样的控制台应用程序中:
static void Main(string[] args)
{
// Run the batch file that will convert the files.
ExecuteCommand("ConvertImagesInCurrentFolder.bat");
// Pause so the user can see what happened.
Console.ReadLine();
}
static void ExecuteCommand(string command)
{
int exitCode;
ProcessStartInfo processInfo;
Process process;
processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
// *** Redirect the output ***
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;
process = Process.Start(processInfo);
process.WaitForExit();
// *** Read the streams ***
string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();
exitCode = process.ExitCode;
Console.WriteLine("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output));
Console.WriteLine("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error));
Console.WriteLine("ExitCode: " + exitCode.ToString(), "ExecuteCommand");
process.Close();
}
我得到错误:
Invalid Parameter - 1300x1300
为什么当我从我的控制台应用程序 运行 时会收到此错误,但当我从命令行 运行 时不会收到此错误?
还有一个名为 convert
的 windows CMD 命令。确保 ImageMagick 实际上可以通过环境变量 PATH 或在批处理文件中直接指定 ImageMagick/convert 可执行文件路径来访问您的应用程序。
所以简而言之,我怀疑您的应用程序正在调用 CMD convert
(转换文件系统)而不是 ImageMagick/convert。
我有一个批处理文件,如下所示:
@echo off
REM Create the folder to put the converted files in
md PngConverted
REM Iterate all bitmap files
for /r %%F in (*.bmp) do (
REM Convert the files to PNG. Resize them so they are no bigger than 1300x1300
REM Also limit to 250 colors.
convert -resize 1300x1300 -colors 250 "%%~nF%%~xF" ".\PngConverted\%%~nF.png"
REM Output to the user that we completed this file.
echo converted %%~nF%%~xF to png
)
它使用 ImageMagick 转换和调整一堆图像的大小。
如果我只是双击它,效果很好。运行没有错误并输出我转换后的图像。
但是,我试图将它放入这样的控制台应用程序中:
static void Main(string[] args)
{
// Run the batch file that will convert the files.
ExecuteCommand("ConvertImagesInCurrentFolder.bat");
// Pause so the user can see what happened.
Console.ReadLine();
}
static void ExecuteCommand(string command)
{
int exitCode;
ProcessStartInfo processInfo;
Process process;
processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
// *** Redirect the output ***
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;
process = Process.Start(processInfo);
process.WaitForExit();
// *** Read the streams ***
string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();
exitCode = process.ExitCode;
Console.WriteLine("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output));
Console.WriteLine("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error));
Console.WriteLine("ExitCode: " + exitCode.ToString(), "ExecuteCommand");
process.Close();
}
我得到错误:
Invalid Parameter - 1300x1300
为什么当我从我的控制台应用程序 运行 时会收到此错误,但当我从命令行 运行 时不会收到此错误?
还有一个名为 convert
的 windows CMD 命令。确保 ImageMagick 实际上可以通过环境变量 PATH 或在批处理文件中直接指定 ImageMagick/convert 可执行文件路径来访问您的应用程序。
所以简而言之,我怀疑您的应用程序正在调用 CMD convert
(转换文件系统)而不是 ImageMagick/convert。