我需要从32位命令行调用一批批处理文件。
我有这样的代码:
$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位命令行。
$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(),但没有成功。我怎么才能解决这个问题?
发布于 2016-03-22 15:49:22
最后,我找到了下面的代码,迫使它在32位内调用cmd。
$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发布于 2016-03-17 14:59:21
您正在运行32位可执行文件。例如,您可以通过显示图像类型列(查看过程资源管理器显示列→Process )来验证这一点。CMD窗口中显示的路径只是工作目录,与进程是32位还是64位无关。
发布于 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位环境中。
https://stackoverflow.com/questions/36062259
复制相似问题