首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从64位PowerShell调用32位命令行

从64位PowerShell调用32位命令行
EN

Stack Overflow用户
提问于 2016-03-17 13:39:58
回答 3查看 3.4K关注 0票数 2

我需要从32位命令行调用一批批处理文件。

我有这样的代码:

代码语言:javascript
复制
$cmd = "C:\Windows\SysWOW64\cmd.exe"
$args="/C"
$pipe = "0 |"
Start-Process $cmd $args

如果我只调用$cmd,它将打开命令行窗口。标题是"C:\windows\syswow64\cmd.exe",但是窗口中的路径是“C:\windows\system32 32”。

如何强制PowerShell在32位系统中运行所有批处理文件?另外,我如何使用$pipe,因为有些批处理文件要求“按任意键继续”?

我能够使用下面的代码运行32位命令行。

代码语言:javascript
复制
$CMD = "C:\Windows\SysWOW64\cmd.exe"
$test = 'C:\Update\test folder\test.cmd'
$proc = (Invoke-WmiMethod Win32_Process Create "$cmd /c $test")

但是,由于文件夹名有空格,上面的代码无法工作。如果删除文件夹名中的空格,一切都正常。

我试过双引号,单引号,$a = $test.tostring(),但没有成功。我怎么才能解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-22 15:49:22

最后,我找到了下面的代码,迫使它在32位内调用cmd。

代码语言:javascript
复制
$NewProcInfo = New-Object System.Diagnostics.ProcessStartInfo
$NewProcInfo.FileName = "$CMD"
$NewProcInfo.RedirectStandardError = $true
$NewProcInfo.RedirectStandardOutput = $true
$NewProcInfo.UseShellExecute = $false
$Path = "`"$batchfile`""
$args = @("/c", "$Path")
$NewProcInfo.Arguments = "$args"
$Proc = New-Object System.Diagnostics.Process
$Proc.StartInfo = $NewProcInfo
$Proc.Start() | Out-Null
$Proc.WaitForExit()
$ReturnCode = $Proc.ExitCode
票数 0
EN

Stack Overflow用户

发布于 2016-03-17 14:59:21

您正在运行32位可执行文件。例如,您可以通过显示图像类型列(查看过程资源管理器显示列→Process )来验证这一点。CMD窗口中显示的路径只是工作目录,与进程是32位还是64位无关。

票数 1
EN

Stack Overflow用户

发布于 2016-06-09 11:28:46

你最初的解决方案起作用了。你刚才犯了一个经典的思维错误。

您可以从cmd.exe启动32位C:\Windows\SysWOW64

当然,DOS框将显示当前目录C:\Windows\System32。这是一个32位的应用程序.64位Windows上32位应用程序中的C:\Windows\System32实际上是C:\Windows\SysWOW64目录.

您只是锁定在DOS框内的32位环境中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36062259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档