为文件夹中的每个文件运行命令行 - 引号问题(我认为)

时间:2013-09-15 20:25:40

标签: vbscript

我正在尝试为当前目录中的每个特定文件类型(例如每个.txt文件的示例)运行以下命令行:

"C:\Program Files (x86)\some program\someprogram.exe" "file.txt" "file.txt.mod" -someparameter

当我从打开的Windows命令提示符(包括所有引号)运行此命令时,它可以正常工作。 但是当我通过这个VB运行它时,它什么都不做/立即关闭。

我做错了什么?我有一种感觉它与引号有关,但我的脑袋无法解决它。

Set objFSO = CreateObject("Scripting.FileSystemObject") 
objStartFolder = left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))
Set objFolder = objFSO.GetFolder(objStartFolder)
Set colFiles = objFolder.Files

For Each objFile in colFiles 
    strFileName = objFile.Name
    If objFSO.GetExtensionName(strFileName) = "txt" Then
        RunCommand()
    End If
Next

Sub RunCommand
    Set oShell = WScript.CreateObject ("WScript.Shell")
    oShell.run "cmd.exe /C ""C:\Program Files (x86)\some program\someprogram.exe"" """ & objFile.Path & """ """ & objFile.Path & ".mod"" -someparameter"
    Set oShell = Nothing
End Sub

1 个答案:

答案 0 :(得分:1)

你应该

  • 降低失败风险

通过

  1. 使用“Option Explicit”
  2. 使用标准方法(.GetParentFolderName)来避免聪明的“滚动你自己的”黑客
  3. 正确使用类型前缀(objStartFolder)
  4. 避免仅使用一次的变量(objFolder,colFiles)
  5. 不使用globals将参数传递给Subs / Functions(objFile)
  6. 避免(不必要的)压力(。无需等待的运行,每个文件的新WScript.Shell,“cmd”而不是“%comspec%”)
  7. 在'dos box'中使用cscript而不是双击/ wscript
    • 检查您的假设

    通过

    1. 诊断输出(.Echo objFile.Name在调用RunCommand之前,使用变量存储和.Echo命令发送到.Run)
    2. 检查提供诊断(.Run)的功能的返回值
    3. 健全性检查如:
    4. (只是为了驯服格式化程序)

      >> WScript.Echo goFS.GetExtensionName("A.TXT")
      >>
      TXT