运行 vb.net 中的批处理文件
Run batch file in vb.net
我正在尝试 运行 vb.net 中的批处理文件。这是我正在使用的命令:
System.Diagnostics.Process.Start("C:\Folder\convertTIF2PNG.bat")
批处理文件应该通过它所在的文件夹进行爬网,并将所有 .tif 文件转换为 .png。当我调用该文件时,命令 window 打开(所以我知道发生了什么事),但是 .tif 文件的 none 被转换了。当我简单地双击目录中的批处理文件时,它 运行s 正常(所以我知道这不是批处理文件的问题)。为什么我的代码没有 运行 正确地处理批处理文件?
这是批处理文件中的代码:
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
)
问题是,您的批处理文件 运行 来自您的 vb.net 应用 运行 来自的任何目录。您必须将 vb.net 应用程序放在同一位置 (c:\folder) 才能正常工作。您可以将批处理文件转换为 vb.net 命令行应用程序,并将要转换的目录作为命令行参数传入,而不是这样做。
或者,如果您真的想将代码保留在批处理文件中,请将路径作为命令行参数传递给 vb.net 代码,然后将其传递到批处理文件中。
重要的是将路径作为命令行参数传递,否则只要位置发生变化,您就会不断更新 vb.net 应用程序或批处理文件。
您可以修改批处理文件以引用文件所在的绝对路径。
for /r %%a in (C:\Folder) do ( ... etc, etc.
或者,您可以改用 ProcessStartInfo 对象,以便您的 VB.Net 应用程序知道在哪个文件夹中启动进程作为其默认文件夹。你的批处理文件就可以了。但是,我认为最好修改批处理文件,因为它不会工作,除非它在特定文件夹中 运行,您可能应该避免这样做。您可以将要处理的目录作为参数传递给批处理文件。
有关 ProcessStartInfo 对象的 WorkingDirectory 参数的更多信息,请参阅 here。
这里举个例子(C#,但很容易修改为 VB.Net):
c# ProcessStartInfo
我正在尝试 运行 vb.net 中的批处理文件。这是我正在使用的命令:
System.Diagnostics.Process.Start("C:\Folder\convertTIF2PNG.bat")
批处理文件应该通过它所在的文件夹进行爬网,并将所有 .tif 文件转换为 .png。当我调用该文件时,命令 window 打开(所以我知道发生了什么事),但是 .tif 文件的 none 被转换了。当我简单地双击目录中的批处理文件时,它 运行s 正常(所以我知道这不是批处理文件的问题)。为什么我的代码没有 运行 正确地处理批处理文件? 这是批处理文件中的代码:
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
)
问题是,您的批处理文件 运行 来自您的 vb.net 应用 运行 来自的任何目录。您必须将 vb.net 应用程序放在同一位置 (c:\folder) 才能正常工作。您可以将批处理文件转换为 vb.net 命令行应用程序,并将要转换的目录作为命令行参数传入,而不是这样做。
或者,如果您真的想将代码保留在批处理文件中,请将路径作为命令行参数传递给 vb.net 代码,然后将其传递到批处理文件中。
重要的是将路径作为命令行参数传递,否则只要位置发生变化,您就会不断更新 vb.net 应用程序或批处理文件。
您可以修改批处理文件以引用文件所在的绝对路径。
for /r %%a in (C:\Folder) do ( ... etc, etc.
或者,您可以改用 ProcessStartInfo 对象,以便您的 VB.Net 应用程序知道在哪个文件夹中启动进程作为其默认文件夹。你的批处理文件就可以了。但是,我认为最好修改批处理文件,因为它不会工作,除非它在特定文件夹中 运行,您可能应该避免这样做。您可以将要处理的目录作为参数传递给批处理文件。
有关 ProcessStartInfo 对象的 WorkingDirectory 参数的更多信息,请参阅 here。
这里举个例子(C#,但很容易修改为 VB.Net): c# ProcessStartInfo