人们已经在批处理文件中嵌入和执行VBScript很长一段时间了.但是我所看到的所有已发布的解决方案(在此问题最初提出时)都涉及编写临时VBS文件.例如:在Windows批处理文件中嵌入VBScript.
是否可以在批处理中执行嵌入式VBScript而无需编写临时文件?
我正在做一个简单的批处理文件,将位于批处理文件相同路径下的文件夹和文件复制到桌面.我可以轻松地获取批处理文件所在的路径
%~dp0
Run Code Online (Sandbox Code Playgroud)
但我想知道如何获得用户桌面的路径(我使用的是Widows 7 Ultimate)
有什么建议?
在使用批处理文件多年后,我惊讶地发现等号'='被认为是一个参数分隔符.
鉴于此测试脚本:
echo arg1: %1
echo arg2: %2
echo arg3: %3
Run Code Online (Sandbox Code Playgroud)
和调用:
test.bat a=b c
Run Code Online (Sandbox Code Playgroud)
输出是:
arg1: a
arg2: b
arg3: c
Run Code Online (Sandbox Code Playgroud)
为什么这样,怎么可以避免?我不希望脚本的用户考虑到这个怪癖并引用"a = b",这是违反直觉的.
此批处理脚本在Windows 7上运行.
=====编辑=====
更多背景:我在编写bat文件以启动Java应用程序时遇到了这个问题.我想在bat文件中使用一些args,然后将其余的传递给java应用程序.所以我的第一次尝试是做shift,然后重建args列表(因为%*不受影响shift).它看起来像这样,就在我发现问题的时候:
rem Rebuild the args, %* does not work after shift
:args
if not "%1" == "" (
set ARGS=!ARGS! %1
shift
goto args
)
Run Code Online (Sandbox Code Playgroud)
下一步是不再使用shift,而是通过一次删除一个字符%*直到遇到空格来手动实现移位:
rem Remove the 1st arg if it was the profile
set ARGS=%*
if not "%FIRST_ARG%" == "%KNOA_PROFILE%" goto …Run Code Online (Sandbox Code Playgroud) 我想从命令行运行一个vbs命令,就像批量调用一样
cmd.exe /c "echo.Hello World! & pause"
Run Code Online (Sandbox Code Playgroud)
显然这不起作用
wscript /C MsgBox("Hello world")
Run Code Online (Sandbox Code Playgroud)
我可以打印vbs然后调用临时文件然后删除它
cmd.exe /c "echo. [VBSCODE] > temp.vbs & wscript temp.vbs & del temp.vbs"
Run Code Online (Sandbox Code Playgroud)
但这太乱了,我不希望弹出提示.