我正在尝试创建批处理文件以从TXT文件重新启动多台计算机。只要/ c"在这里评论"参数没有空格。如果我通过"测试"作为评论,我得到"测试"在弹出窗口中重启,如预期的那样。如果我通过"测试空间"作为评论,我仍然只能得到"测试"在弹出窗口中。关于@echo,我已经验证了注释在传递给VBS时保留了空格,所以我认为问题是我正在运行" invisible.vbs"脚本以防止另一个CMD窗口打开并挂起原始BAT脚本。
我希望能够运行类似于:
的最终命令shutdown / r / m \\ 127.0.0.1 / t 120 / c"您的计算机将在两分钟内关闭维护任务"
非常感谢任何帮助!
restart.bat的重要部分:
for /f "tokens=1-3" %%c in (%FilePath%) do WScript /nologo "%windir%\myscripts\invisible.vbs" "shutdown /r /m \\%%c /t %delay% /c %message%"
我还尝试在%message%附近添加额外的引号但没有成功:
for /f "tokens=1-3" %%c in (%FilePath%) do WScript /nologo "%windir%\myscripts\invisible.vbs" "shutdown /r /m \\%%c /t %delay% /c "%message%""
invisible.vbs脚本(在StackExchange上找到):
CreateObject("Wscript.Shell").Run "" & WScript.Arguments(0) & "", 0, False
非常感谢任何帮助!
编辑:使用建议的第三种方法,我收到一个脚本错误:
Script: C:\Windows\myscripts\invisible.vbs
Line: 1
Char: 46
Error: The system cannot find the file specified
Code: 80070002
Source: (null)
编辑2:我也尝试了第一种方法,现在我得到一个vbscript echo弹出窗口,其中包含我希望发送的正确命令,但命令不会被发送。我离程序员很远,我用过的唯一的VBS就是我在网上发现的东西。我非常感谢你到目前为止所提供的帮助,但我仍然无法让它发挥作用。
答案 0 :(得分:3)
你不能这样做。 WScript中Arguments
对象背后的逻辑似乎删除了引号。
所以,我至少可以考虑三种选择
1)最简单:使用另一个字符作为引用的指示符,并将其替换为vbs脚本中的引用
cmd code : cscript myscript.vbs "shutdown /r /m \\%%c /t %delay% /c '%message%'"
vbs code : WScript.CreateObject("WScript.Shell").Run replace(WScript.Arguments(0),"'",""""), 0, False
唯一的问题是,在某些时候,您可能需要将占位符作为真实角色使用。
2)最复杂:使用wmi检索当前进程ID,并从此处检索脚本的原始命令行。很多代码,如果有兴趣的话,在StackOverflow这里有一些不错的样本。
3)简单,快速,不寻常。使用环境变量。将命令保存到变量中,并将变量的名称传递给脚本。从中,检索变量内容并使用它
cmd code : set "runVar=shutdown /r /m \\%%c /t %delay% /c "%message%""
wscript //nologo "%windir%\myscripts\runInvisible.vbs" runVar
vbs code : With WScript.CreateObject("WScript.Shell") : .Run .ExpandEnvironmentStrings("%" & WScript.Arguments(0) & "%"), 0, False : End With
答案 1 :(得分:0)
cmd code or bat code:
wscript //nologo invisible.vbs "hello world" 0
某种程度上,结尾处的零会导致引号之间的部分被视为一个参数
享受