【问题标题】:How to edit a .bat file with Excel VBA如何使用 Excel VBA 编辑 .bat 文件
【发布时间】:2021-08-13 16:18:58
【问题描述】:

我正在为 .bat / .vbs 文件开发 Excel 插件。该插件有 2 个选项 (1) 创建一个新的 .bat / 和 .vbs 文件,以及 (2) 修改现有的 .bat 和 .vbs 文件。

“创建”选项效果很好,完全符合我们的需要。

我遇到了“修改”部分的问题。当用户选择“修改”时,Excel 表单将显示一个列表框。用户滚动列表并选择他们需要修改的列表。到此为止吧。

下一步是加载项打开(不运行).bat 和 .vbs 文件。我已经能够执行 .bat 文件;依次执行 .vbs 文件。但这不是我需要它做的。

如果我要手动打开 .bat 或 .vbs 文件。我会右键单击 .bat 或 .vbs 文件并选择“编辑”。相应的文件将在记事本中打开。然后我可以进行任何更改并保存文件。

我看起来重复的是使用 VBA 的“右键单击并选择编辑步骤”。

任何建议将不胜感激。提前感谢您的帮助....

【问题讨论】:

  • 您可以使用注册表,例如:HKEY_LOCAL_MACHINE\software\classes\.bat 并使用其Default 值通常为batfile,以访问其密钥,例如HKEY_LOCAL_MACHINE\software\classes\batfile,然后验证其默认值是否仍为Windows Batch File,如果是,则从其子键HKEY_LOCAL_MACHINE\software\classes\batfile\Shell\Edit\CommandDefault 值中获取内容,在未触及的系统上为"%SystemRoot%\System32\Notepad.exe" %1 .您可能还需要检查相同密钥的 HKEY_CURRENT_USER 版本,然后使用 .vbs 再次检查
  • 我建议您不要偷工减料,而只是假设最终用户从未修改过他们的系统或用户注册表。没有什么可以阻止他们根据需要使用不同的应用程序来处理文件,因此您不应该期望其他情况。
  • 您需要执行这一行,而不是执行 .bat 文件:notepad filename.bat。这也可以用于创建一个新的 .bat 文件,当它不存在时。
  • 然而,@Aacini 假设从未进行过任何更改,这在技术上并不是所要求的。工作是复制右键单击Edit 选项,唯一的方法是在选择Edit 时检索运行的命令。很多人不希望古老而毫无特色的 notepad.exe 来处理他们的脚本编辑。
  • @NandanA.............我使用了下面 Gokhan Aycan 的答案。它让我最接近我想要完成的目标。

标签: vba batch-file edit excel-addins


【解决方案1】:

我对加载项不熟悉,如有误导,请见谅。这在普通代码中确实有效:

假设有一个带有 TextBox1、ListBox1 和 CommandButton1 的用户窗体 frmTest7(以保存更改)。 userform代码如下。

Option Explicit

Private Sub CommandButton1_Click()

    Dim fso As FileSystemObject
    Dim oFile As TextStream
    
    Dim FilePath As String
    Dim strFile As String
    
    FilePath = "C:\Users\" & Environ("UserName") & "\desktop\test_bat.bat"
    
    Dim i As Long
    
    For i = 0 To frmTest7.ListBox1.ListCount - 1
        strFile = strFile & frmTest7.ListBox1.List(i) & vbCrLf
    Next i
    
    Set fso = New FileSystemObject
    
    If fso.FileExists(FilePath) Then
        'fso.DeleteFile (FilePath)
        Set oFile = fso.CreateTextFile(FilePath, True)
        oFile.WriteLine strFile
    End If
    
    If Not (oFile Is Nothing) Then oFile.Close
    
    Set oFile = Nothing
    Set fso = Nothing

End Sub

Private Sub ListBox1_Click()

    frmTest7.TextBox1.Text = frmTest7.ListBox1.List(frmTest7.ListBox1.ListIndex)

End Sub

Private Sub TextBox1_AfterUpdate()

    frmTest7.ListBox1.List(frmTest7.ListBox1.ListIndex) = frmTest7.TextBox1.Text

End Sub

Private Sub UserForm_Activate()

    Dim fso As FileSystemObject
    Dim oFile As TextStream
    
    Dim FilePath As String
    Dim strFile As String
    
    FilePath = "C:\Users\" & Environ("UserName") & "\desktop\test_bat.bat"
    
    Set fso = New FileSystemObject
    Set oFile = fso.OpenTextFile(FilePath, ForReading)
    
    strFile = oFile.ReadAll
    
    oFile.Close
    
    Dim arrStrFile() As String
    
    strFile = Replace(strFile, vbCr, "")
    arrStrFile = Split(strFile, Chr(10))
    
    frmTest7.ListBox1.Clear
    frmTest7.ListBox1.List = arrStrFile
    
    Set oFile = Nothing
    Set fso = Nothing

End Sub

【讨论】:

  • ................我能够根据您的回答来做我需要做的事情。我稍微修改了一下,因为我有 2 个文件需要打开和查看。我将文本框并排放置,它的工作方式与我预期的一样。感谢您的帮助.......
【解决方案2】:

我找到了一种方法,但不确定它是否适合你。

1。我们无法打开.bat 文件,但我们可以打开.txt 文件,因此我将.bat 文件转换为.txt 文件并使用超链接打开它。

在下面的示例中,提醒是一个.bat 文件,单击“打开”按钮会将Reminder.bat 转换为Reminder.txt 并打开文件。

Sub RenameFileExtensionFromBatToTextAndOpen()
 
Dim fileName As String
Dim fileLocation As String
Dim originalExtension As String
Dim renamedExtenstion As String

fileLocation = "C:\Users\Nandan\Downloads\"
fileName = Sheets("Sheet1").Range("B5")
originalExtension = fileLocation & fileName & ".bat"
renamedExtenstion = fileLocation & fileName & ".txt"
    
Name originalExtension As renamedExtenstion
ActiveWorkbook.FollowHyperlink Address:=renamedExtenstion

End Sub    

2。保存更改后,单击“完成”会将文件格式从Reminder.txt 更改为Reminder.bat

Sub RenameFileExtensionFromTxtToBat()
 
Dim fileName As String
Dim fileLocation As String
Dim originalExtension As String
Dim renamedExtenstion As String

fileLocation = "C:\Users\Nandan\Downloads\"
fileName = Sheets("Sheet1").Range("B5")
originalExtension = fileLocation & fileName & ".bat"
renamedExtenstion = fileLocation & fileName & ".txt"

Name renamedExtenstion As originalExtension

End Sub

在打开文件时,

点击完成后,

【讨论】:

  • 虽然这是一个详细的答案,但没有必要(或理想)重命名 .bat 文件以在文本编辑器中打开它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 2021-12-22
  • 2018-11-01
  • 2018-01-08
  • 1970-01-01
相关资源
最近更新 更多