Windows碎片整理不被识别为内部或外部命令,可操作程序或批处理文件

时间:2013-01-19 04:34:32

标签: c# windows batch-file defragmentation

我正在制作一个tech-toolkit程序,并且包含在这个'toolkit'中的是一个在本地磁盘上运行碎片整理的按钮。目前我为此制作的批处理文件很简单,它只运行基本的碎片分析:

defrag C: /A

触发此按钮后面的C#代码是:

System.Diagnostics.ProcessStartInfo procInfo = 
    new System.Diagnostics.ProcessStartInfo();
procInfo.Verb = "runas";
procInfo.FileName = "(My Disk):\\PreDefrag.bat";
System.Diagnostics.Process.Start(procInfo);

此代码正是我想要的,它调用UAC然后使用Administative Privledges启动我的批处理文件。虽然运行批处理文件后,我收到命令控制台的输出是:

C:\Windows\system32>defrag C: /A
'defrag' is not recognized as an internal or external command, 
    operable program or batch file.

导致此错误的原因是什么?如何解决?

2 个答案:

答案 0 :(得分:2)

检查以确保您的defrag.exe文件实际存在于C:\ Windows \ System32。

尝试将'defrag'命令完全限定为:

C:\WINDOWS\system32\defrag.exe C: /A

打开cmd提示符并运行此命令:defrag.exe /?并在问题中发布您所获得的内容。

答案 1 :(得分:1)

首先:将项目Platform Target属性设置为Any CPU并取消选中Prefer 32-bit选项(99,9%这是问题)。然后......为什么在你可以这样做时启动一个调用命令的批处理呢?

ProcessStartInfo info = new ProcessStartInfo();
info.Arguments = "/C defrag C: /A";
info.FileName = "cmd.exe";
info.UseShellExecute = false;
info.Verb = "runas";
info.WindowStyle = ProcessWindowStyle.Hidden;

Process.Start(info);

就像我机器上的魅力一样。对于多个命令:

ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.UseShellExecute = false;

Process cmd = Process.Start(info);

using (StreamWriter sw = p.StandardInput)
{
    if (sw.BaseStream.CanWrite)
    {
        sw.WriteLine(command1);
        sw.WriteLine(command2);
        // ...