Windows 从批处理文件运行.VBS

Windows 从批处理文件运行.VBS,windows,batch-file,cmd,Windows,Batch File,Cmd,作为桌面支持人员,我一直在为某些特定工作编写批处理文件 几个月来,我一直在编写一个概要文件备份脚本,随着角色的需要和新问题的出现而改变 我试图从批处理文件中运行以下VBS脚本,并将其输出指向另一个文件夹 Set oNet= WScript.CreateObject("WScript.Network") Set oDrives = oNet.EnumNetworkDrives oUser = oNet.UserName Set oFilesys = CreateObject("Scripting.

作为桌面支持人员,我一直在为某些特定工作编写批处理文件

几个月来,我一直在编写一个概要文件备份脚本,随着角色的需要和新问题的出现而改变

我试图从批处理文件中运行以下VBS脚本,并将其输出指向另一个文件夹

Set oNet= WScript.CreateObject("WScript.Network")
Set oDrives = oNet.EnumNetworkDrives
oUser = oNet.UserName
Set oFilesys = CreateObject("Scripting.FileSystemObject")
Set oFiletxt = oFilesys.CreateTextFile("Mapped_Network_Drives_"&oUser&".cmd", True)
For i = 0 to oDrives.Count - 1
oFiletxt.WriteLine "Net Use " & oDrives.Item(i) & " " & chr(34)& oDrives.Item(i+1) & chr(34)  & " /persistent:yes"
Next
oFiletxt.Close
此VBS脚本(不是我编写的)用于将用户映射的网络驱动器导出到CMD文件,该文件使用netuse命令重新映射这些驱动器

如果VBS脚本在批处理文件外部自行运行,则其工作正常,但当使用cscript等在批处理内部运行时,它会创建映射的输出文件\u网络\u驱动器\u%username%.cmd,但该文件为空

REM pushes script to use batch file Drive Letter as working directory
setlocal & pushd %~d0
ECHO =============================
ECHO Creating Backup Folder
ECHO =============================
MD "%UserName%_Backup"
ECHO =============================
ECHO Backing Up Mapped Network Drives
ECHO =============================
REM pushes script to use Backup Folder as working directory
pushd "%~d0%UserName%_Backup"
REM Runs VB script to backup Mapped Network Drives
cscript //nologo "%~dp0Mapped_Network_Drives.vbs"
pause
上面是我一直在使用的代码片段。

试试这个

vbs部件:更正了驱动器集合上的迭代

选项显式
Dim用户名、驱动器
使用WScript.CreateObject(“WScript.Network”)
用户名=.userName
设置驱动器=.EnumNetworkDrive
以
暗驱动
使用WScript.CreateObject(“Scripting.FileSystemObject”).CreateTextFile(“映射的网络驱动器”&userName&“.cmd”,True)
对于驱动器=0到(驱动器数-1)步骤2
.WriteLine“净使用”和drives.Item(驱动器)和“”&drives.Item(驱动器+1)和“”/persistent:yes
下一个
.结束
以
批处理部分:确保正确处理所有路径引用

@echo关闭
setlocal enableextensions disabledelayedexpansion
调用:getCurrentBatchFile\u f0
对于“%\u f0%”中的%%a,请执行以下操作(
设置“备份文件夹=%%~da\%username%\u备份”
设置“scriptsFolder=%%~dpa”
)
md“%backupFolder%”2>nul
推送“%backupFolder%”和(
cscript//nologo“%scriptsFolder%\Mapped\u Network\u Drives.vbs”
邻苯二胺
) || (
回显备份文件夹不存在
)
后藤:eof
:getCurrentBatchFile returnVar
设置“%~1=%~f0”
后藤:eof

适合我。提示:不要忘记在最后调用
popd
(两次)(以保持一致)。同样在我的机器上,我只有1个映射的网络驱动器,
oDrives.Count
是2(将
下标抛出范围之外
,但可能我的WMI出错)。总之,批处理运行创建了
.cmd
文件。@ScottSmith,您发布了一个有问题的vbscript(主要是对驱动器列表的迭代),答案包括一个更正的版本。更改文件夹和/或驱动器时,您发布了一个带有非清除路径引用的批处理文件,
pushd“%~d0%UserName%\u Backup”
在脚本位于备份所在的驱动器中且当前文件夹不是驱动器的根目录时失败(并且
%0
引用了您期望的内容)答案包括一个更安全的版本。我错过了什么?你没有错过任何东西,谢谢你的帮助。你实际上已经在上面更详细地解释了你所做的事情,这正是我想要的。我不明白如何将零件批处理到我当前的脚本中。