Windows 的 doskey/alias 中有空格吗?

Windows 的 doskey/alias 中有空格吗?

我试着跑Laravel 的 Artisan通过定义 doskey 别名来在 (docker) 容器内执行命令。

我的想法是:

php artisan=docker-compose exec apache php artisan $1

但是它不允许我在键中使用空格。有什么办法可以实现吗?

显示“无效的宏定义”错误的图像

编辑我为 Windows 制作了一个小型 GUI 工具来运行命令https://github.com/thomasmoors/DockerArtisan

答案1

在这种情况下,我必须给出否定的答案 - 在 doskey 名称中使用空格是不可能的。Doskey 是为命令提示符 (cmd) 创建的,因此概念上相当简单。

我认为这是不可能的,因为:

  • 在诸如 的 doskey 命令中doskey a b=ab,它将“a”用作无效选项
  • doskey 命令不接受宏名称周围的引号。

以下是我进行过的一些测试:

图像

如您所见,一些特殊字符可以被接受,但不能接受空格。

即使宏名称中没有空格,doskey 也是一个旧的 DOS 程序,并且只能在 PowerShell 中工作,但效果并不好。它与PSReadLine依赖本机控制台输入功能的模块相冲突。我测试了这个:

图片2

如您所见,您需要执行两个额外的操作:

  • 发出命令Remove-Module PSReadLine
  • 向 doskey 命令添加参数/exename=powershell.exe

当两者都完成后,命令就会正确执行并给出正确的错误。

我最好的建议是不要在 PowerShell 中使用 doskey。Doskey 很老,而 PowerShell 很新,两者一起使用很困难。我真的不认为 doskey 有用到不可替代的程度。

尝试找到另一种解决方案来处理您经常使用的命令。例如,将命令存储在可执行文件中(例如.ps1 或 ).cmd,或.bat存储在您要添加到 PATH 的文件夹中。

答案2

另一种解决方案是创建.bat文件并使用参数运行它。我使用此解决方案来运行magento2命令。
例子:

@ECHO OFF
IF "%1"=="clean" (
    php bin/magento c:c & goto :exit

)  
:exit 

文件名:magento.bat当我输入时magento clean它会运行php bin/magento c:c

答案3

没有办法实现这一点。Doskey 宏名中不能有空格。

答案4

以下只是一个说明为什么在命令名称中允许使用空格很困难的例子:

假设我定义了两个宏:

doskey a b=echo 'ran cmd [a b] with input ' $*
doskey a b c=echo 'ran cmd [a b c] with input ' $*

如果您输入命令,C:\src>a b c efg解释器如何知道您的意思是run cmd [a b] with input [c efg]run cmd [a b c] with input [efg]。这适用于任何可执行文件,而不仅仅是 doskey 命令,如果您尝试解决这个问题,您可能会根据以相同名称开头的其他命令限制命令可以采取的输入。

相关内容