【问题标题】:Run batch file in vb.net在 vb.net 中运行批处理文件
【发布时间】:2016-06-01 14:25:00
【问题描述】:

我正在尝试在 vb.net 中运行一个批处理文件。这是我正在使用的命令:

    System.Diagnostics.Process.Start("C:\Folder\convertTIF2PNG.bat")

批处理文件应该爬过它所在的文件夹并将所有 .tif 文件转换为 .png。当我调用该文件时,命令窗口会打开(所以我知道发生了一些事情),但是没有任何 .tif 文件被转换。当我简单地双击目录中的批处理文件时,它运行正常(所以我知道批处理文件没有问题)。为什么我的代码没有正确运行批处理文件? 这是批处理文件中的代码:

    for /r %%a in (.) do (
pushd %%a   
  (
    "C:\Program Files (x86)\IrfanView\i_view32.exe" *.tif /convert=*.png /transpcolor=(255,255,255)
    erase /f/q *.tif
  )
  popd 

)

【问题讨论】:

  • 批处理文件如何引用TIF文件所在的目录?您需要将运行的目录视为默认目录。您可以将其添加为 ProcessStartInfo 的一部分。或者,只需在批处理文件中将任何文件夹引用设为绝对引用即可避免此问题。
  • @ManoDestra 感谢您的回复!我还是有点困惑。批处理文件通过在其父目录中搜索.tif 扩展名来引用TIF 文件所在的目录(即,如果它在C:\folder 中,则检查C:\folder)。以下是批处理文件中的代码:for /r %%a in (.) do ( pushd %%a ( "C:\Program Files (x86)\IrfanView\i_view32.exe" *.tif /convert=*.png /transpcolor=(255,255,255) erase /f/q *.tif ) popd ) 如何避免该问题?
  • 您可以在批处理文件中明确声明 C:\Folder,以便找到文件的路径是绝对路径。否则,您将不得不修改 ProcessStartInfo 以便它知道该进程打算在 C:\Folder 中启动,以便您的批处理文件可以工作。如果您尝试从不是 C:\Folder 的目录运行批处理文件,那么您会看到它以与 VB.Net 相同的方式失败。
  • 好的,感谢您的帮助!

标签: vb.net batch-file batch-processing


【解决方案1】:

您可以修改批处理文件以引用文件所在的绝对路径。

for /r %%a in (C:\Folder) do ( ... etc, etc.

或者,您可以改用 ProcessStartInfo 对象,以便您的 VB.Net 应用程序知道在哪个文件夹中启动进程作为其默认文件夹。你的批处理文件就可以了。但是,我认为最好修改批处理文件,因为除非它在该特定文件夹中运行,否则它将无法工作,您可能应该避免这样做。您可以将要处理的目录作为参数传递给批处理文件。

有关 ProcessStartInfo 对象的 WorkingDirectory 参数的更多信息,请参阅here

这里是一个例子(C#,但很容易修改为 VB.Net): c# ProcessStartInfo

【讨论】:

    【解决方案2】:

    问题是,您的批处理文件是从您的 vb.net 应用程序运行的任何目录运行的。您必须将 vb.net 应用程序放在同一位置 (c:\folder) 才能正常工作。您可以将批处理文件转换为 vb.net 命令行应用程序,然后将要转换的目录作为命令行参数传递,而不是这样做。

    或者,如果您真的想将代码保留在批处理文件中,请将路径作为命令行参数传递给 vb.net 代码,然后将其传递给批处理文件。

    重要的是将路径作为命令行参数传入,否则每当位置更改时,您将不断更新您的 vb.net 应用程序或批处理文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 2023-04-09
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多