【问题标题】:How to create a cmd/PowerShell alias that can be used with arguments如何创建可与参数一起使用的 cmd/PowerShell 别名
【发布时间】:2013-06-21 19:14:58
【问题描述】:

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

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 UnrestrictedSet-ExecutionPolicy Unrestricted -Force

【问题讨论】:

    标签: powershell cmd


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!效果很好。不知道我们可以在 PowerShell 中编写类似的代码。稍后我还将编辑我的帖子,以解释如何使用 $profile 使该功能在其他会话中持续存在(我刚刚学到的东西)。
    【解决方案2】:

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

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

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

    【讨论】:

    • 嗯...不,我的路径中没有任何 php.cmd。但是谢谢你:)
    【解决方案3】:

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

    function zf ($p1, $p2, $p3) {
        #your code here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多