【发布时间】:2016-03-17 13:39:58
【问题描述】:
我有一堆批处理文件需要从 32 位命令行调用。
我有这个代码:
$cmd = "C:\Windows\SysWOW64\cmd.exe"
$args="/C"
$pipe = "0 |"
Start-Process $cmd $args
如果我只调用 $cmd 它会打开命令行窗口。标题为“C:\windows\syswow64\cmd.exe”,但窗口中的路径为“C:\windows\system32”。
如何强制 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(),但没有成功。
我该如何解决这个问题?
【问题讨论】:
-
如果您从 syswow64 调用 cmd.exe,它是 32 位可执行文件,显示的路径是工作目录,与您使用的可执行文件无关(除非您提供它将使用的工作目录调用时您的 powershell 所在的目录)。如果您想通过管道输入某些内容,则必须直接在脚本中进行操作,而不是通过变量。 Start-Process 也不接受随机管道输入,因此必须以另一种方式调用 cmd
-
你为什么需要使用
Start-Process?如果指定名称,PowerShell 可以运行批处理文件。 -
您好 Bill,我需要能够在 32 位系统中调用批处理文件。我对此有疑问。
-
& $Env:SystemRoot\SysWOW64\cmd.exe /c D:\Path\test.bat将使用 cmd.exe 的 32 位副本运行批处理文件。但是为什么你需要这样做呢? -
嗨,Bill,其中一个批处理文件调用了一个必须以 32 位运行的软件。这真的是一个很长的故事:) 谢谢你的帮助。
标签: powershell batch-file