在批处理和 VBS 混合中使用变量

2024-03-19

This thread https://stackoverflow.com/questions/9074476/is-it-possible-to-embed-and-execute-vbscript-within-a-batch-file-without-using-a/38600712#38600712概述了如何编写可能包含多种脚本语言组合的批处理混合程序,例如批处理、VBS、JScript、PowerShell 等。问题是,批处理混合程序是否将“外来”语言块视为“函数”,即调用这些块可能包括像常规和延迟扩展批处理变量这样的参数,这些参数像%1、%2等通常的参数一样被引用?

下面的示例显示了解压缩文件任务中的方法,同时使用this https://stackoverflow.com/questions/21704041/creating-batch-script-to-unzip-a-file-without-additional-zip-tools文件解压代码,但在 Win10 64 位中出现错误 - 为什么?请注意,链接文件解压缩代码给出了error https://stackoverflow.com/questions/38598289/unzip-file-error-when-using-vbs-script-in-windows-10/38600861?noredirect=1#comment64591878_38600861在 Win 10 中运行时也是如此,但不同。

<!-- : Begin batch script
@echo off
set "dir=C:\Temp\" & set "file=%USERPROFILE%\Downloads\archive.zip\"
cscript //nologo "%~f0?.wsf" "%dir%" "%file%"
exit /b

----- Begin wsf script --->
<job><script language="VBScript">
 set fso = CreateObject("Scripting.FileSystemObject")
 If NOT fso.FolderExists(%1) Then
 fso.CreateFolder(%1)
 End If
 set objShell = CreateObject("Shell.Application")
 set FilesInZip = objShell.NameSpace(%2).items
 objShell.NameSpace(%1).CopyHere(FilesInZip)
 set fso = Nothing
 set objShell = Nothing
</script></job>

:: Error
..\test.bat?.wsf(9, 8) Microsoft VBScript compilation error: Invalid character

在 vbscript 中,第一个参数是:wscript.Arguments(0)

第二个参数是:wscript.Arguments(1)

所以,你应该这样写: `

----- Begin wsf script --->
<job><script language="VBScript">
 set fso = CreateObject("Scripting.FileSystemObject")
 If NOT fso.FolderExists(wscript.Arguments(0)) Then
 fso.CreateFolder(wscript.Arguments(0))
 End If
 set objShell = CreateObject("Shell.Application")
 set FilesInZip = objShell.NameSpace(wscript.Arguments(1)).items
 objShell.NameSpace(wscript.Arguments(0)).CopyHere(FilesInZip)
 set fso = Nothing
 set objShell = Nothing
</script></job>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在批处理和 VBS 混合中使用变量 的相关文章

  • ERRORLEVEL 与 %ERRORLEVEL% 与感叹号 ERRORLEVEL 感叹号

    我想我对 ERRORLEVEL 与 ERRORLEVEL 有基本的了解 但是 ERRORLEVEL 让我困惑 我正在制作一个调用可执行文件的脚本 然后使用任务列表来查看它是否正在运行 然后使用taskkill来杀死它 如果是 然后尝试输出错
  • 如果 vbs 脚本崩溃,请重新启动它

    我正在尝试制作一个 vb 脚本 如果它崩溃 它将重新启动另一个 vb 脚本 我搜索了又搜索 但我得到的只是如何重新启动程序 并且由于 vb 脚本是后台进程 因此当您在 Win32 Process 中搜索时它不起作用 这是我的代码 set S
  • 批处理文件随机删除文本文件的一半行?

    我需要一种方法来使用批处理来查看文本文件的每一行 并删除该文本文件中的一半行 随机选择要删除的行 这是为了模拟 D D 游戏中的锦标赛 我所需要的只是一种方法来淘汰每轮比赛的获胜者 我可以轻松地制作一个批处理文件 复制文本文件并为每一轮重命
  • 批处理文件中的 URL 解码

    如何在批处理文件中 urldecode 以下字符串 我需要更改以下内容 http x3a x2f x2f www example com x2f some page x2f some x2f link html to this http w
  • 每次批量从选择中获取随机句子

    有没有一种方法可以做到这一点 而不是每次都设置相同的回显 您可以给出一个回显列表 并且每次到达该回显命令时它都会选择一个随机的回显 是的 这是一个概念证明 echo off setlocal enabledelayedexpansion s
  • 以管理员身份从 cmd 批处理运行 PowerShell 脚本

    我有一个 PowerShell 设置 我想在执行策略可能受到限制并且需要管理员权限的计算机上执行 理想情况下 我可以将其包装在 cmd 批处理中 如下所示 powershell Command Start Process powershel
  • 读取txt文件中的每一行并使用windows dos命令分配变量

    我通过使用 Beyond Compare 命令行比较这 2 个文件夹 将文件从一个路径复制到 svn 工作副本 使用 Beyond Compare 进行比较后将生成报告 如果右侧存在任何额外文件 则应从 svn 存储库中删除 所以我使用下面
  • 批量设置变量=%变量:~1%是什么意思

    谁能解释一下是什么 1 在批处理文件中的以下语句中 我分配的值 variable到服务器名称并尝试过echo variable 我得到与输出相同的服务器名称 谁能解释一下下面的语句是如何工作的 set variable variable 1
  • Windows 批处理:如何添加主机条目?

    我想使用此批处理脚本通过使用自动将新条目添加到我的主机文件中windows questions tagged windows batch 不幸的是 剧本只需在主机文件中添加一行 当我以管理员身份运行脚本时 又出了什么问题 echo off
  • 从 CMD 切换启用/禁用以太网适配器

    我正在尝试创建一个 bat文件 可以启用 禁用我的以太网适配器 但我对编码或 cmd 语法没有太多了解 我正在考虑使用netsh命令如下 IF Ethernet adapter is enabled GOTO disable ELSE GO
  • 在批处理脚本中发送 Windows 密钥

    我最近一直在使用SendKeys使用批处理脚本的函数 我已经了解如何在窗口中输入某些键 例如 Tab 键 SendKeys TAB 或者退格键 SendKeys BACKSPACE 但我一直尝试在不按Windows键的情况下输入它 不幸的是
  • (此时出乎意料 - 批处理脚本

    我正在使用下面的批处理脚本并收到错误 这时候是出乎意料的 我知道问题出在第一行 但我不明白出了什么问题 有任何想法吗 script IF 1 LOOP1 SET P isDefault Value Missing do you want t
  • Windows批处理支持异常处理吗?

    Windows批处理编程支持异常处理吗 如果没有 是否有任何方法可以有效地模拟批处理文件中的异常处理 我希望能够在批处理脚本中的任何 CALL 级别的任何位置 抛出异常 并重复弹出 CALL 堆栈 直到找到活动的 TRY 块 然后 CATC
  • Windows 批处理文件:如何启用命令的内联回显

    如果在 Windows 批处理文件中默认禁用 echo 是否有办法为特定命令 内联 启用它 我知道可以回显特定命令disabled通过在命令前添加 但是有没有办法做相反的事情呢 例如 假设有一个像这样的批处理文件 echo off cmd1
  • 批量读取INI文件并将其设置为全局变量

    我有一个批处理文件 它已经做了很多事情 并试图扩展它以从 ini 文件中获取一些数据 例如 ini 文件看起来像这样 Settings1 Text Text Text1 Text Text2 Text Settings2 Text Text
  • 午夜后时间设置不正确

    我使用以下命令以更易读的格式获取当前日期 时间 set day date 4 2 set mth date 7 2 set yr date 10 4 set hur time 0 2 set min time 3 2 set bdate d
  • 有没有办法回显所有驱动器/分区的列表,例如 C:\ D:\ E:\ 等并提示用户选择其中一个来执行某些功能?

    我想知道是否有一种方法可以检查并回显 PC 上所有可用驱动器 分区的列表 并提示用户通过输入字母并按 Enter 提交来选择其中一个 然后批处理文件将继续 理想的结果可能是怎样的 echo off echo List all drives
  • 为什么 Windows 批处理文件“exit”不能与“||”一起使用?

    批处理 命令脚本中的通常建议是使用exit b设置时退出ERRORLEVEL来指示错误 然而这与 CMD 的配合不太好 and 运营商 如果我在 CMD 命令行运行这些 C gt echo exit b 1 gt foo cmd C gt
  • 如何通过批处理文件检查服务是否正在运行并启动它,如果它没有运行?

    我想编写一个执行以下操作的批处理文件 Check if a service is running 如果正在运行 请退出批处理 如果没有运行 启动该服务 到目前为止 我在谷歌上搜索的代码示例被证明不起作用 所以我决定不发布它们 启动服务是通过
  • 批量设置命令的输出和错误以分隔变量

    在Windows 7批处理 cmd exe命令行 中 我试图将命令的标准输出 stdout 和标准错误 stderr 重定向到单独的变量 因此第一个变量设置为输出 第二个变量设置为输出 变量设置为错误 如果有 而不使用任何临时文件 我已经尝

随机推荐