Vb.net 如何在VB中启动.bat文件而不将该文件与启动该文件的程序关联?

Vb.net 如何在VB中启动.bat文件而不将该文件与启动该文件的程序关联?,vb.net,windows,batch-file,cmd,Vb.net,Windows,Batch File,Cmd,好的,这个问题看起来很奇怪,但这是我发布的问题的延续 因此,我在VisualStudio中创建了一个带有特定行的.bat文件并启动了它,但它基本上找不到它需要的文件,但是如果我启动它手动创建的.bat文件,它就会工作 在我看来,问题在于程序启动的.bat文件与在文件夹中创建的文件不同 .bat文件使用找到的Asesprite的命令行界面,例如: 我不确定我需要分享VB代码的哪一部分,所以如果需要的话可以询问 .bat中的错误类似于: C:\Users\User\Desktop\aseConve

好的,这个问题看起来很奇怪,但这是我发布的问题的延续

因此,我在VisualStudio中创建了一个带有特定行的.bat文件并启动了它,但它基本上找不到它需要的文件,但是如果我启动它手动创建的.bat文件,它就会工作

在我看来,问题在于程序启动的.bat文件与在文件夹中创建的文件不同

.bat文件使用找到的Asesprite的命令行界面,例如:

我不确定我需要分享VB代码的哪一部分,所以如果需要的话可以询问

.bat中的错误类似于:

C:\Users\User\Desktop\aseConverter\aseConverter\bin\Debug>"E\Asesprite\asesprite.exe" --batch skeleton2_gib3.ase --scale 1 --save-as skeleton2_gib3.gif
File not found: "skeleton2_gib3.ase"
Error loading file "skeleton2_gib3.ase"
A document is needed before --save-as arguement
第一行不应该是调试文件夹,而是创建.bat文件的位置。我不知道如何修理它

应该是

C:\Users\User\Desktop\skeleton>"E\Asesprite\asesprite.exe" --batch skeleton2_gib3.ase --scale 1 --save-as skeleton2_gib3.gif

这里的问题是批处理文件引用的文件没有路径。因此,这些文件必须位于批处理文件的当前工作目录中

但是VB.net调用批处理文件命令行解释器cmd.exe,而不设置工作目录。因此,Windows为批处理文件设置的当前工作目录与启动VB.net应用程序的当前工作目录相同

但是,启动应用程序在不同的目录中创建批处理文件和其他文件,而不是在其自己的当前工作目录中

一种解决方案是将批处理文件中的当前工作目录更改为批处理文件存储的目录。这可以通过引用批处理文件的参数0来完成,该参数包含具有完整路径的批处理文件的名称

说明如何获取批处理文件的驱动器和路径

因此,一种解决方案是使用如下批处理文件:

@echo off
cd /D "%~dp0"
set "ASEPRITE=%ProgramFiles%\Aseprite\aseprite.exe"
"%ASEPRITE%" --batch animation.ase --scale 2 --save-as animation-x2.gif
有关参数
/D
的含义,请参见命令提示窗口中执行
cd/?
后的帮助输出(如有必要,还可以更改驱动器)

在命令提示窗口中运行
call/?
for/?
时,可以阅读有关
%~dp0
的说明

另一种可能是使用以下批次代码:

@echo off
pushd "%~dp0"
set "ASEPRITE=%ProgramFiles%\Aseprite\aseprite.exe"
"%ASEPRITE%" --batch animation.ase --scale 2 --save-as animation-x2.gif
popd
在帮助中解释了与命令cd的区别,该帮助在执行
pushd/?
后在命令提示符窗口中输出


最好是创建批处理文件,所有文件都引用完整的路径、名称和文件扩展名。

这个问题有点太多了。你能澄清一下你在问什么吗?@roryap问题基本上是如何从程序中启动.bat文件,而不让.bat文件认为它就是.bat文件所在的位置?例如,如果我将程序移动到文件夹中,.bat文件是用.ase文件创建的,那么一切都正常。“找不到文件”是一个很好的提示,表明应用程序无法在其查找的位置找到文件。为了防止应用程序猜测要查找的位置,请提供完全限定的路径名。@I不可检测的是,我确信我指定了正确的路径。我认为问题是程序从内存启动了一个.bat文件,而不是从我创建它的地方启动的。请查看并在批处理文件中使用它,例如,使用as first命令
cd/D“%~dp0”
将当前工作目录设置为批处理文件的目录。或者在批处理文件
pushd“%~dp0”
的顶部和批处理文件
popd
的底部使用。当然,您也可以为VB.net应用程序中已启动的
cmd.exe
进程设置工作目录。
@echo off
pushd "%~dp0"
set "ASEPRITE=%ProgramFiles%\Aseprite\aseprite.exe"
"%ASEPRITE%" --batch animation.ase --scale 2 --save-as animation-x2.gif
popd