Vbscript 运行空间过多的程序

Vbscript 运行空间过多的程序,vbscript,spaces,Vbscript,Spaces,我有一个与命令提示符配合使用的命令: CMD /C ""C:\Program Files (x86)\VideoLAN\VLC\VLC" -vvv "http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO==" :sout=#file{dst="F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4",no-ove

我有一个与命令提示符配合使用的命令:

CMD /C ""C:\Program Files (x86)\VideoLAN\VLC\VLC" -vvv "http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO==" :sout=#file{dst="F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4",no-overwrite} :sout-keep""
这里我需要CMD/C返回errorlevel

这就是我尝试使用run方法在VBScript中运行此脚本的方式:

此命令引发以下错误:

预期语句结尾字符:74

我看到了许多关于在其路径和参数路径中使用空格运行程序的类似问题。正如我在回答中看到的那样,我尝试将上述命令更改为数百个不同的命令,并在不同的位置添加更多双引号,但没有任何效果,每次我运行脚本时,都会出现以下错误之一:

预期报表结束 系统找不到指定为null的文件/路径 未终止字符串常量 预期 期望

如果您遵循了,您会意识到字符串中的双引号都不会转义

从 您只需要正确地转义字符串中的引号,规则是只要您想在字符串中显示双引号

所以这条线应该是

WshShell.Run "CMD /C """"C:\Program Files (x86)\VideoLAN\VLC\VLC"" -vvv ""http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSig‌n=c2VydmVyX3RpbWU9NC‌8yNy8yMDE3IDEyO=="" :sout=#file{dst=""F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4"",no-overwrite} :sout-keep""""", 0, False
它将作为

CMD /C ""C:\Program Files (x86)\VideoLAN\VLC\VLC" -vvv "http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO==" :sout=#file{dst="F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4",no-overwrite} :sout-keep"
CMD/C C:\ProgramFilesx86\VideoLAN\VLC\VLC-vvvhttp://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSig‌n=c2VydmVyX3RpbWU9NC‌​8yNy8yMDE3IDEyO==:sout=文件{dst=F:\\C分区备份\\下载\\视频\\测试.mp4,无覆盖}:sout-keep 使现代化 在他们的文章中正确地指出,原始命令有一个不必要的尾部双引号,因此,尽管规则对于获得正确的结果是正确的,但是您试图转义的原始命令需要是正确的。根据你的问题,我做了一个假设

我有一个与命令提示符配合使用的命令

原来的命令应该是

CMD/C C:\ProgramFilesx86\VideoLAN\VLC\VLC-vvvhttp://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO== :sout=file{dst=F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4,no overwrite}:sout keep 使用这种方法会是什么

WshShell.Run "CMD /C """"C:\Program Files (x86)\VideoLAN\VLC\VLC"" -vvv ""http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSig‌n=c2VydmVyX3RpbWU9NC‌8yNy8yMDE3IDEyO=="" :sout=#file{dst=""F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4"",no-overwrite} :sout-keep""", 0, False
并导致被执行为

CMD/C C:\ProgramFilesx86\VideoLAN\VLC\VLC-vvvhttp://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO== :sout=file{dst=F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4,no overwrite}:sout keep 如果您遵循了,您会意识到字符串中的双引号都不会转义

从 您只需要正确地转义字符串中的引号,规则是只要您想在字符串中显示双引号

所以这条线应该是

WshShell.Run "CMD /C """"C:\Program Files (x86)\VideoLAN\VLC\VLC"" -vvv ""http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSig‌n=c2VydmVyX3RpbWU9NC‌8yNy8yMDE3IDEyO=="" :sout=#file{dst=""F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4"",no-overwrite} :sout-keep""""", 0, False
它将作为

CMD /C ""C:\Program Files (x86)\VideoLAN\VLC\VLC" -vvv "http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO==" :sout=#file{dst="F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4",no-overwrite} :sout-keep"
CMD/C C:\ProgramFilesx86\VideoLAN\VLC\VLC-vvvhttp://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSig‌n=c2VydmVyX3RpbWU9NC‌​8yNy8yMDE3IDEyO==:sout=文件{dst=F:\\C分区备份\\下载\\视频\\测试.mp4,无覆盖}:sout-keep 使现代化 在他们的文章中正确地指出,原始命令有一个不必要的尾部双引号,因此,尽管规则对于获得正确的结果是正确的,但是您试图转义的原始命令需要是正确的。根据你的问题,我做了一个假设

我有一个与命令提示符配合使用的命令

原来的命令应该是

CMD/C C:\ProgramFilesx86\VideoLAN\VLC\VLC-vvvhttp://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO== :sout=file{dst=F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4,no overwrite}:sout keep 使用这种方法会是什么

WshShell.Run "CMD /C """"C:\Program Files (x86)\VideoLAN\VLC\VLC"" -vvv ""http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSig‌n=c2VydmVyX3RpbWU9NC‌8yNy8yMDE3IDEyO=="" :sout=#file{dst=""F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4"",no-overwrite} :sout-keep""", 0, False
并导致被执行为

CMD/C C:\ProgramFilesx86\VideoLAN\VLC\VLC-vvvhttp://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO== :sout=file{dst=F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4,no overwrite}:sout keep 是的:

您只需要正确地转义字符串中的引号,规则是 每当您想在字符串中显示引号时,将其加倍

但是,在原始代码中仍然有不平衡的双引号,并且有多余的尾随

这将作为

CMD /C ""C:\Program Files (x86)\VideoLAN\VLC\VLC" -vvv "http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO==" :sout=#file{dst="F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4",no-overwrite} :sout-keep"
示例VBScript使用特定可执行文件cliparserPause.exe模拟VLC行为:

option explicit
On Error GoTo 0
Dim strResult: strResult = Wscript.ScriptName
Dim sCmdToRun, WshShell, intReturn

' CMD /C ""D:\bat\Prog Files (x86)\cliparserPause.exe" -vvv "http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO==" :sout=#file{dst="F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4",no-overwrite} :sout-keep"
sCmdToRun = "CMD /C """"D:\bat\Prog Files (x86)\cliparserPause.exe"" -vvv ""http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO=="" :sout=#file{dst=""F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4"",no-overwrite} :sout-keep"""
strResult = strResult & vbNewLine & sCmdToRun

Set WshShell = WScript.CreateObject("WScript.Shell")
intReturn = WshShell.Run( sCmdToRun, 1, true)
strResult = strResult & vbNewLine & Cstr( intReturn )

Wscript.Echo strResult
Wscript.Quit( intReturn )
输出:

cliparserPause.exe源:

是的:

您只需要正确地转义字符串中的引号,规则是 每当您想在字符串中显示引号时,将其加倍

但是,在原始代码中仍然有不平衡的双引号,并且有多余的尾随

这将作为

CMD /C ""C:\Program Files (x86)\VideoLAN\VLC\VLC" -vvv "http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO==" :sout=#file{dst="F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4",no-overwrite} :sout-keep"
示例VBScript使用特定可执行文件cliparserPause.exe模拟VLC行为:

option explicit
On Error GoTo 0
Dim strResult: strResult = Wscript.ScriptName
Dim sCmdToRun, WshShell, intReturn

' CMD /C ""D:\bat\Prog Files (x86)\cliparserPause.exe" -vvv "http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO==" :sout=#file{dst="F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4",no-overwrite} :sout-keep"
sCmdToRun = "CMD /C """"D:\bat\Prog Files (x86)\cliparserPause.exe"" -vvv ""http://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO=="" :sout=#file{dst=""F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4"",no-overwrite} :sout-keep"""
strResult = strResult & vbNewLine & sCmdToRun

Set WshShell = WScript.CreateObject("WScript.Shell")
intReturn = WshShell.Run( sCmdToRun, 1, true)
strResult = strResult & vbNewLine & Cstr( intReturn )

Wscript.Echo strResult
Wscript.Quit( intReturn )
输出:

cliparserPause.exe源:


可能的副本未转义双引号。在VBScript中使用时,字符串中出现的所有双引号都需要转义,可以通过将它们加倍来实现。有关如何执行的详细信息,请参阅。该命令应为WshShell。运行CMD/C:\Program Files x86\VideoLAN\VLC\VLC-vvvhttp://www.foo.
com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO==:sout=file{dst=F:\\Partition C Backup\\Downloads\\video\\TESTING.mp4,no overwrite}:sout-keep,0,False。可能存在重复的文件,但未跳过双引号。在VBScript中使用时,字符串中出现的所有双引号都需要转义,可以通过将它们加倍来实现。有关如何执行的详细信息,请参阅。该命令应为WshShell。运行CMD/C:\Program Files x86\VideoLAN\VLC\VLC-vvvhttp://www.foo.com:8085/video.mp4/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9NC8yNy8yMDE3IDEyO== :sout=file{dst=F:\\Partition C Backup\\Downloads\\Video\\TESTING.mp4,no overwrite}:sout keep,0,False.+1好的地方,我没有测试它,只是假设OP说命令在命令提示符下工作,转义是唯一的问题。@Lankymart命令在cmd自动丢弃不平衡尾随时工作。这只不过是我的假发…@JosefZ谢谢大家,我应该选择解决我的问题还是离开它?很好的应用程序cliparserpuse:-+1个好点,我没有测试它,只是假设OP说命令在命令提示符下起作用,转义是唯一的问题。@Lankymart命令在cmd自动丢弃不平衡尾随时起作用。这只不过是我的头发分裂…@JosefZ谢谢大家,我应该选择解决我的问题还是离开它?很好的应用程序cliparserPause:-非常好,谢谢大家,正如大家所说,我在原始命令末尾添加的双引号是多余和不必要的,我检查了,甚至CMD在有和没有它的情况下运行命令,偶数以三个双引号运行。我认为命令在有或没有多余尾随的情况下是完全相同的-非常好,谢谢,正如大家所说,我在原始命令末尾添加的双引号是多余的和不必要的,我检查了,甚至CMD在有和没有它的情况下运行命令,甚至在有三个双引号的情况下运行命令。我认为命令在有或没有多余尾随的情况下是完全相同的-