运行命令行参数
我正在尝试使用 Shell() 命令通过 VB.NET 运行命令行参数。
我正在尝试使用这段代码:
FOR /R %I in (*.pdf) DO @pdf2swf.exe "%~fI" -o "%~dpI%~nI.swf" -f -T 9
-t -G
使用这个:
Shell("FOR /R %I in (*.pdf) DO @pdf2swf.exe "%~fI" -o "%~dpI%~nI.swf" -f -T 9
-t -G ")
但是,解释器给了我这个错误:
Character is not valid. (BC30037)
对于 %~
部分。
我还尝试创建一个字符串并使用 Shell(StringName) 将参数传递给 Shell() 命令,但我仍然在字符串中遇到相同的错误。
我该如何解决这个问题?
I'm trying to run a command line argument through VB.NET using the Shell() command.
I'm trying to use this piece of code:
FOR /R %I in (*.pdf) DO @pdf2swf.exe "%~fI" -o "%~dpI%~nI.swf" -f -T 9
-t -G
Using this:
Shell("FOR /R %I in (*.pdf) DO @pdf2swf.exe "%~fI" -o "%~dpI%~nI.swf" -f -T 9
-t -G ")
However, the interpreter is giving me this error:
Character is not valid. (BC30037)
For the %~
part.
I also tried created a string and passing the argument to the Shell() command by using Shell(StringName)
but I still get the same error in the string.
How could I fix this issue?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这不是Shell 方法的正确使用:
第一个参数应该是要执行的程序的名称。
FOR
不是一个程序,它是cmd.exe
命令行解释器的内置功能。据我所知,您有以下选项:
选项 1:显式调用
cmd.exe
并传递要使用/ 执行的字符串c
参数:不要为 get 重复引号 (
"
) 来转义它们。选项 2:创建批处理文件并使用以下命令调用批处理文件 。
外壳 3:不要使用
FOR
来查找所需的文件,而是使用System.IO命名空间的方法,例如Directory.EnumerateFiles,而是。This is not proper use of the Shell Method:
The first parameter is supposed to be the name of a program to execute.
FOR
is not a program, it's a built-in feature of thecmd.exe
command line interpreter.As far as I can see, you have the following options:
Option 1: Explicitly call
cmd.exe
and pass the string that you want to execute with the/c
parameter:Don't for get to duplicate quotation marks (
"
) to escape them.Option 2: Create a batch file and call the batch file using
Shell
.Option 3: Don't use
FOR
to find the files you need, but use the methods of the System.IO namespace, e.g. Directory.EnumerateFiles, instead.像这样转义你的内部引号。
我记得,在 VB.Net 中,您可以通过将双引号加倍来转义双引号。
编辑:
如果您在 Shell 之外进行迭代,可能会有所帮助。 (当然要调试)
您还可以考虑使用 System.Diagnostics.Process 而不是 Shell
Escape your internal quote marks like this.
As I recall, in VB.Net you escape double quote marks by doubling them.
EDIT:
It might help if you do the iteration outside of the Shell. (Certainly to debug)
You could also cosider using
System.Diagnostics.Process
instead ofShell
尝试转义引号(2 个引号 - “” - 在 VB.NET、IIRC 中):
如果 pdf2swf.exe 不在运行程序可执行文件的同一文件夹中,这可能是您收到错误的原因。
此外,如果 *.pdf 文件位于可执行文件所在的不同文件夹中,您也会遇到同样的问题。您可以指定要搜索的驱动器和路径:
Try escaping the quotes (2 quote marks - "" - in VB.NET, IIRC):
If pdf2swf.exe is not in the same folder your program's executable is running from, that could be a reason you're getting the error.
Also, you'll have the same issue with the *.pdf files if they are in a different folder other than where your executable is. You can specify the drive and path to search: