是的,我知道,有几十篇关于此问题的帖子,标题几乎相同;然而,我似乎无法让任何事情发挥作用。
我只是想在 Powershell 脚本中调用一个带有参数/开关的可执行文件。我需要为一个脚本运行大约 50 个不同的可执行文件,这些可执行文件具有不同的命令和参数列表。我甚至不知道如何运行大多数米老鼠示例。如果我能找到一个解决方案来运行以下内容,我可能就可以推断出该解决方案以满足我的需求。
- rmdir “C:\SomePath”/S /Q
- 目录/s/b
我尝试过很多很多已发布的解决方案,但都不起作用[对我来说],而且几乎所有解决方案都产生相同的错误。对于上述示例,我通常会得到以下之一:
- “找不到接受参数‘/S’的位置参数。”或
- “无法找到路径‘D:\s’,因为它不存在。”
我尝试过使用 & 符号调用运算符、拆分参数、转义引号、Invoke-Process、Start-Process、Invoke-Expression 等各种规定的解决方案,但没有一个能够正常运行。
讽刺的是,我能够运行一些带有开关的命令而不会出现任何错误。例如,运行以下命令不会出现任何错误,无需转义/包装/封装——只需在脚本中包含该行即可。您会注意到它有开关,并且这些开关带有斜线。
- taskkill /f /im MyTask
此外,以下两种方法均可行(注意斜线与非斜线):
- ping -n 3 -4 -l 64 雅虎
- ping /n 3 /4 /l 64 雅虎
因此,看起来斜线不是问题。我只是不知道为什么上述示例不起作用。
拜托,我是不是寻找上述示例的 Powershell 等效项。即,我不是在寻找 dir 的 Get-ChildItem 解决方案或 rmdir 的 Remove-Item 解决方案。我是字面上地查看如何在 Powershell 中调用带有参数的可执行文件;具体来说,使用这些示例。了解为什么 dir/rmdir 示例不起作用而 taskkill 和 ping 起作用也很好。
提前感谢您的回复。如能提供任何帮助,我们将不胜感激。
答案1
dir
不是可执行文件。它是一个内置的 shell 命令——PowerShell 和 Cmd 都有自己的内部命令“dir”,它们接受完全不同的参数。(PowerShell 版本实际上是 Get-ChildItem 的别名,需要标准的 PS 样式参数。)
要从 PowerShell 调用内置的 Cmd,请通过以下方式运行它cmd.exe /c
:
cmd /c rd/s/q C:\SomePath
cmd /c "dir /s /b"
(或者使用 PowerShell 实现完全相同的功能Get-ChildItem
。)
类似地,要从 Cmd 调用内置的 PowerShell,您可以调用 powershell.exe:
powershell -Command "gci -recurse C:\SomePath | % {echo $_.Name}"
您的其他示例是独立可执行文件(taskkill.exe 和 ping.exe),因此它们的行为在不同的 shell 之间没有差异。