【问题标题】:Format a usb drive using format command使用 format 命令格式化 USB 驱动器
【发布时间】:2018-10-17 04:46:41
【问题描述】:

一直在尝试通过ShellProcess.Start 方法运行 format.com 命令,但没有成功,需要一些关于我哪里出错的指导。

注意 - 我已在本地工作目录 (C:\AEL) 中放置了 format.com 的副本

Shell("C:\AEL\Format.com " & "G:" & " /q")

结果是一个错误:

Microsoft.VisualBasic.dll 中发生 System.IO.FileNotFoundException' 附加信息:找不到文件。

我尝试过没有具有相同结果的完整路径以及 System32 目录的完整路径。 AEL 是我自己的本地工作目录。

如果我使用Process.Start 方法

Process.Start("C:\AEL\format.com " & "G:" & " /q") 

我收到以下错误:

System.ComponentModel.Win32Exception' 发生在 System.dll 中 附加信息:系统找不到指定的文件

拔掉头发 - 一定是我缺少一些简单的东西

【问题讨论】:

    标签: vb.net shell process drive usb-drive


    【解决方案1】:

    一定有一些我想念的简单的东西

    是的,有。文档。如果您尝试使用类型或成员但它不起作用,那么您应该做的第一件事是阅读该类型或成员的文档。 Microsoft 没有花费数百甚至数千工时来编写文档。

    如果你这样做了,你就会知道你需要分别为进程提供文件执行和命令行参数:

    Process.Start("C:\AEL\format.com", "G: /q")
    

    你会注意到我也避免连接两个字面值Strings 有两个,这很愚蠢。

    【讨论】:

    • 我理解了文档,但显然没有。只是一步步教自己。以为我正在使用该选项的 Start(string,string) 版本,并用它来尝试' Process.Start("IExplore.exe", "C:\\myPath\\myFile.htm")' 示例所以想它也适用于 format.com。仍在阅读更多文档以了解单独的参数选项,但您的 cmets 表示赞赏。
    • 要格式化注释中的代码,请将其包裹在重音而不是单引号中。坟墓(法语,发音为“grarv”)通常被称为“反勾号”,与美国布局键盘上的波浪号 (~) 位于同一键上。您也可以对问题和答案中的内联代码 sn-ps 执行相同的操作,但您绝对应该像您所做的那样对代码块使用 4-soace 缩进。我已经为您的原始问题添加了一些带有格式的编辑,因此您可以打开它进行编辑以查看它的外观(如果需要)。
    【解决方案2】:

    进一步阅读后使用了以下内容:

    Dim FDrive As New ProcessStartInfo
            FDrive.FileName = "format.com"
            FDrive.Arguments = Mid(TDir, 6, 2) & ForQ & Mid(TDir, 9, 4) & "X"
            FDrive.UseShellExecute = False
            FDrive.CreateNoWindow = True
            FDrive.RedirectStandardOutput = True
            FDrive.RedirectStandardInput = True
            Process.Start(FDrive)
    

    这很好用,允许我通过 ForQ 变量选择完整或快速格式。

    还是想知道为什么

    process.start("Drivename", "Arguments")
    

    方法不适用于使用。试图了解差异基于:

    https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.start?view=netframework-4.7.2

    它描述了 Start(String,string) 的用法。

    不过,现在想知道如何捕获我刚刚开始的格式化过程的端点。 不得不求助于计时器来检查

    Private Sub TimerX_Tick(sender As Object, e As EventArgs) Handles TimerX.Tick
        FProcess = Process.GetProcessesByName("format.com")
        If FProcess.Count > 0 Then : Exit Sub : End If
        TimerX.Stop() : TimerX.Enabled = False
        CreateObject("WScript.Shell").Popup(TDir & " FORMAT COMPLETED", 3, "FORMAT DRIVE REQUEST")
        Can = 0 : ButtonStatus()
    End Sub
    

    有没有更简单的方法来监控我可以使用的格式化过程的结束?

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 2022-06-18
      • 2020-08-25
      • 2015-11-07
      相关资源
      最近更新 更多