在Unix中,我可以运行myscript '"test"',我会得到"test".
在Windows中,cmd我得到了'test'.
如何将双引号作为参数传递?我想知道如何从cmd窗口手动执行此操作,因此我不必编写程序来测试我的程序.
我有一个PowerShell脚本将网站添加到Internet Explorer中的可信站点:
set-location "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
set-location ZoneMap\Domains
new-item TESTSERVERNAME
set-location TESTSERVERNAME
new-itemproperty . -Name http -Value 2 -Type DWORD
Run Code Online (Sandbox Code Playgroud)
我想从批处理文件中执行这些PowerShell命令.当我必须运行单个命令时似乎很简单,但在这种情况下,我有一系列相关的命令.我想避免为批处理调用PS脚本创建单独的文件 - 所有内容都必须在批处理文件中.
问题是:如何从批处理文件中执行powershell命令(或语句)?
我正在使用以下代码片段来确定我的vbscript正在运行的进程ID:
On Error Resume Next
Dim iMyPID : iMyPID = GetObject("winmgmts:root\cimv2").Get("Win32_Process.Handle='" & CreateObject("WScript.Shell").Exec("mshta.exe").ProcessID & "'").ParentProcessId
If Err.Number <> 0 Then Call Handle_Error(Err.Description)
On Error Goto 0
Run Code Online (Sandbox Code Playgroud)
在我的Windows 7(32位)计算机上,大约90%的时间都可以运行,并且iMyPID包含当前运行脚本的进程ID.但是,有10%的时间Handle_Error会被错误消息" SWbemServicesEX:Not found " 调用.
最近运行Windows 7(64位)的其他人报告Handle_Error总是被错误消息" Out of memory " 调用.这似乎是一个疯狂的错误消息,只是为了找到你自己的进程ID!
任何人都可以推荐更好的方法吗?
我正在使用 CScript 运行 VBScript 文件,我需要将命令行传递给脚本,其中参数包含空格和引号。整个命令需要作为一个参数传递给脚本。例如:
C:\> CScript myscript.vbs //Nologo "cmd.exe /c "dir && del /q *.txt""
Run Code Online (Sandbox Code Playgroud)
请注意,上面的特定命令行只是一个示例,但它确实涉及我要执行的操作(即传递涉及运行 cmd.exe 的命令行)。但是,我正在尝试解决一般情况。
问题是 CScript 似乎在试图确定引号的开始和结束位置时感到困惑。至少有时候。
以下脚本可能有助于解释。它只是输出传入的参数,因为它看到它们:
Dim count
For count = 0 To WScript.Arguments.Count-1
WScript.Echo CStr(count) & " = " & WScript.Arguments.Item(count)
Next
Run Code Online (Sandbox Code Playgroud)
很多时候,它按预期工作:
C:\> cscript myscript.vbs //Nologo "1 2 3"
0 = 1 2 3
Run Code Online (Sandbox Code Playgroud)
但是当引用参数中有引号时,情况会发生变化:
C:\> cscript myscript.vbs //Nologo "1 "2 3""
0 = 1 2
1 = 3
Run Code Online (Sandbox Code Playgroud)
我知道在上面的示例中每个引号是打开还是关闭参数存在引入歧义,因此接下来我尝试转义内部引号,以便命令处理器将它们视为文字字符串:
C:\> cscript myscript.vbs //Nologo "1 ^"2 3^""
0 = 1 ^2 …Run Code Online (Sandbox Code Playgroud)