2

我希望能够执行以下命令而不必输入那么多

php E:\zftool\zftool.phar create project E:\test

所以我创建了一个包含这个的 zf.cmd 文件

php E:\zftool\zftool.phar %1 %2 %3

但是当我进入

zf create project E:\test

它只执行别名

php E:\zftool\zftool.phar

关于如何解决这个问题的任何想法?提前致谢。

==================================================== ===============================

[编辑]:

JPBlanc提出的解决方案解决方案解决了我的问题,但是如果您在运行时创建该函数,您将在关闭 PowerShell 窗口后丢失其定义。

要使其在每个会话中持续存在,您必须将该功能添加到您的个人资料中:

  1. 打开 Windows PowerShell。

  2. 输入notepad $profile命令。如果它打开一个空的未命名文件,那么您应该关闭它并使用New-Item -path $profile -type file命令创建一个新的 $profile。

  3. 将您的函数代码粘贴到您刚刚创建的文件中,保存它,您就可以开始了。

如果收到任何错误消息,例如

“无法加载文件,因为此系统上禁用了脚本的执行”

可以通过输入来修复

Set-ExecutionPolicy Unrestricted或者Set-ExecutionPolicy Unrestricted -Force

4

3 回答 3

2

在你的情况下,我不会使用.cmd文件。我将创建一个带有 3 个参数的 PowerShell函数。 zfzf函数将使用Invoke-expressionCmdLet 或&.

zf ($p1, $p2, $p3)
{
  [string]$pathToPHPExe = "C:\PHP\PHP.exe"
  [string]$pathToFILE = "E:\zftool\zftool.phar"
  [Array]$arguments = $pathToFILE, $p1, $p2, $p3

  & $pathToPHPExe $arguments
}
于 2013-06-21T20:01:21.363 回答
0

如果这是您的批处理文件的全部内容,它应该可以正常工作。命令行的输出是什么?启用回显后,它应该显示它正在尝试运行的内容。

不过,我的第一个想法是,为什么它可能不起作用,也许当它调用 php 时,你的路径中有一个 php.cmd 文件,比你的 php.exe 早,并且 php.cmd 只传递第一个参数(即,它只有一行像php.exe %1)。

在您的批处理文件中,尝试显式运行php.exe,看看是否有帮助。

于 2013-06-21T21:05:34.417 回答
0

那里缺少一件事:将代码块定义为函数的'function'关键字。

function zf ($p1, $p2, $p3) {
    #your code here
}
于 2018-03-31T07:05:06.437 回答