运行命令行参数

发布于 2024-11-30 22:52:03 字数 505 浏览 1 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无所谓啦 2024-12-07 22:52:03

这不是Shell 方法的正确使用:

公共共享函数 Shell(路径名作为字符串,[...])作为整数

参数

路径名称
类型:System.String
必需的。细绳。要执行的程序的名称,以及任何必需的参数和命令行开关。 PathName 还可以包含驱动器和目录路径或文件夹。

第一个参数应该是要执行的程序的名称。 FOR 不是一个程序,它是 cmd.exe 命令行解释器的内置功能。

据我所知,您有以下选项:

选项 1:显式调用 cmd.exe 并传递要使用 / 执行的字符串c 参数:

Shell("cmd.exe /c for /R %I ...")

不要为 get 重复引号 (") 来转义它们。

选项 2:创建批处理文件并使用以下命令调用批处理文件 。

外壳 3:不要使用FOR来查找所需的文件,而是使用System.IO命名空间的方法,例如Directory.EnumerateFiles,而是。

This is not proper use of the Shell Method:

Public Shared Function Shell (PathName As String, [...]) As Integer

Parameters

PathName
Type: System.String
Required. String. Name of the program to execute, together with any required arguments and command-line switches. PathName can also include the drive and the directory path or folder.

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 the cmd.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:

Shell("cmd.exe /c for /R %I ...")

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.

明媚殇 2024-12-07 22:52:03

像这样转义你的内部引号。

Shell("FOR /R %I in (*.pdf) DO @pdf2swf.exe ""%~fI"" -o ""%~dpI%~nI.swf"" -f -T 9 -t -G ")

我记得,在 VB.Net 中,您可以通过将双引号加倍来转义双引号。

编辑:

如果您在 Shell 之外进行迭代,可能会有所帮助。 (当然要调试)

Dim sourceFolder As String = "c:\Your call"
Dim sourceFiles As String[] = Directory.GetFiles(sourceFolder, "*.pdf")

ForEach file As String In sourceFiles
    Dim justName As String = Path.GetFileNameWithoutExtension(file)
    Dim shellCall As String = _
        String.Format("pdf2swf.exe ""{0}"" -o ""{1}.swf"" -f -T 9 -t -G", _
                         file, justName)
    Shell(shellCall)
EndFor

您还可以考虑使用 System.Diagnostics.Process 而不是 Shell

Escape your internal quote marks like this.

Shell("FOR /R %I in (*.pdf) DO @pdf2swf.exe ""%~fI"" -o ""%~dpI%~nI.swf"" -f -T 9 -t -G ")

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)

Dim sourceFolder As String = "c:\Your call"
Dim sourceFiles As String[] = Directory.GetFiles(sourceFolder, "*.pdf")

ForEach file As String In sourceFiles
    Dim justName As String = Path.GetFileNameWithoutExtension(file)
    Dim shellCall As String = _
        String.Format("pdf2swf.exe ""{0}"" -o ""{1}.swf"" -f -T 9 -t -G", _
                         file, justName)
    Shell(shellCall)
EndFor

You could also cosider using System.Diagnostics.Process instead of Shell

晨光如昨 2024-12-07 22:52:03

尝试转义引号(2 个引号 - “” - 在 VB.NET、IIRC 中):

Shell("FOR /R %I in (*.pdf) DO @pdf2swf.exe ""%~fI"" -o ""%~dpI%~nI.swf"" -f -T 9 -t -G ")

如果 pdf2swf.exe 不在运行程序可执行文件的同一文件夹中,这可能是您收到错误的原因。

此外,如果 *.pdf 文件位于可执行文件所在的不同文件夹中,您也会遇到同样的问题。您可以指定要搜索的驱动器和路径:

Shell ("FOR /R C:\SomeFolder %I in (*.pdf) DO @pdf2swf.exe ""%~fI"" -o ""%~dpI%~nI.swf"" -f -T 9 -t -G ")

Try escaping the quotes (2 quote marks - "" - in VB.NET, IIRC):

Shell("FOR /R %I in (*.pdf) DO @pdf2swf.exe ""%~fI"" -o ""%~dpI%~nI.swf"" -f -T 9 -t -G ")

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:

Shell ("FOR /R C:\SomeFolder %I in (*.pdf) DO @pdf2swf.exe ""%~fI"" -o ""%~dpI%~nI.swf"" -f -T 9 -t -G ")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文