我试图在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
)
答案 0 :(得分:0)
问题是,您的批处理文件是从运行vb.net应用程序的任何目录运行的。您必须将vb.net应用程序放在同一位置(c:\文件夹)才能生效。您可以将批处理文件转换为vb.net命令行应用程序,并将要转换的目录作为命令行参数传递,而不是这样做。
或者,如果您确实希望将代码保存在批处理文件中,请将路径作为命令行参数传递给vb.net代码,然后将其传递给批处理文件。
重要的是将路径作为命令行参数传递,否则每当位置发生变化时,您将不断更新vb.net应用程序或批处理文件。
答案 1 :(得分:0)
您可以修改批处理文件以引用文件所在的绝对路径。
for /r %%a in (C:\Folder) do ( ... etc, etc.
或者,您可以使用ProcessStartInfo对象,以便您的VB.Net应用程序知道将进程启动的文件夹作为其默认文件夹。您的批处理文件就可以了。但是,我认为最好修改批处理文件,因为它不会起作用,除非它在特定文件夹中运行,你应该避免。您可以将目录作为参数传递给批处理文件。
有关ProcessStartInfo对象的WorkingDirectory参数的详细信息,请参阅here。
这里有一个例子(C#,但很容易修改为VB.Net): c# ProcessStartInfo