如何像在 Linux 中一样从 Windows 命令行运行应用程序

如何像在 Linux 中一样从 Windows 命令行运行应用程序

背景:我使用 Fedora GNU/Linux 作为我的主要操作系统,但有时我需要在 Windows 中工作。

多年来,使用 Linux 发行版,我已经习惯主要通过命令行工作,从中调用程序。例如:

  • 用作neovim文本编辑器
  • python直接从 shell运行
  • 使用以下方式编译 LaTeXpdflatex
  • ETC。

我发现这个工作流程更快捷、更舒适。

问题是,要在 Windows 中执行此操作,我必须不断与变量作斗争PATH。每次我想运行一个新程序时,我都必须将其路径添加到变量中PATH。这非常烦人,因为要做到这一点,我必须遵循一个漫长的 GUI 过程来访问环境变量。我读到这个 ​​GUI 选项是最好的,因为从长远来看,使用setxfrom可能会造成混乱。CMD

在 Linux 中,这非常简单 - 您安装一个应用程序,它就会自动从 shell 中调用!为什么 Windows 不会自动将新安装的程序添加到PATH

而且由于 Windows 不这样做,我是否必须忍受麻烦并手动将每个应用程序地址添加到PATH,或者有没有更简单的方法?

使用 PowerShell 代替 CMD 会有什么改变吗?我愿意用一切可能的方法来结束我的烦恼。

答案1

从长远来看,使用 CMD 中的 setx 可能会造成混乱

这绝对是胡说八道——没有任何问题setx

为什么 Windows 不会自动将新安装的程序添加到 PATH?

如果 Windows 对我安装在计算机上的数百个应用程序执行此操作,那么它将变得无法使用。

不同之处在于,在 Linux 中所有应用程序都安装/usr/bin在 PATH 中,而在 Windows 中每个应用程序都安装在单独的文件夹中。

使用 PowerShell 而不是 CMD 会改变什么吗?

不,就搜索可执行文件而言,PowerShell 使用与 CMD 完全相同的 Windows 机制。

我愿意尝试一切可能的方法来结束我的烦恼。

如果您不想将所有应用程序添加到 PATH,则可以使用替代方法:您可以只将一个文件夹添加到 PATH,然后在其中存储应用程序的快捷方式。

答案2

在 Linux 中这非常简单:您安装一个应用程序,它就可以从 shell 中自动调用!

这仅适用于安装到标准位置例如/usr/bin/usr/local/bin。如果你从源安装应用程序,或者安装到你自己的本地位置,那么它显然不会这样工作,你仍然需要处理$PATH

在 Windows 中有一个标准的包管理器:winget。如果可能,您应该使用它并避免使用每个应用程序的安装程序。这将解决一些问题,但不是全部,因为 Windows 不会像 Linux 那样传播东西。Linux 上的应用程序将其二进制文件存储在 中,将/usr/bin库存储在 中/usr/lib,将设置存储在 中/etc,将许多其他文件存储在 中/opt,,/var...~而 Windows 应用程序将几乎所有内容都放在一个文件夹中,以便于管理和卸载

无论如何,无论安装方法如何,编辑%PATH%以包含您使用的每个应用程序是错误的做法。这不仅会使变量变得更长,从而导致许多长命令出现问题,还会不必要地延长可执行文件和库的搜索时间

有很多方法可以解决这个问题:

  • 在 中的文件夹中创建快捷方式或符号链接%PATH%。例如,在该文件夹中添加 C:\MyApps%PATH%创建指向 的链接pdflatex...。python或者,创建运行所需应用程序的 *.cmd/*.bat/*.ps1 文件
  • 将应用添加到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths。就是这样推荐的应用注册方式这也是大多数正确命令(如winwordexcel...)的工作方式。这也可以通过命令行或脚本轻松完成
  • 创建一个永久 doskey 宏在 cmd 中,或者别名(对于简单命令)或功能(对于更复杂的)在 PowerShell 中轮廓

使用 PowerShell 而不是 CMD 会改变什么吗?

不,这显然不会改变与PATH变量相关的任何内容。PowerShell 在可执行文件搜索方面的唯一区别是,出于安全原因,它不会像在 Linux 上一样在当前目录中搜索

但是 PowerShell 功能强大得多,而且没有像 cmd 那样需要学习的可怕遗留行为。没有理由使用 cmd 来编写新脚本。许多命令的工作方式与 Linux 命令相同或有些相似,例如和的行为cdcd ~PowerShell 和 bash 中完全相同(是的,您可以~在 PowerShell 中将其用作 home,而 cmd 则需要费力更改到您的主文件夹)

PowerShell 甚至比 bash 更加强大,它可以执行本机 Win32 应用程序可以执行的任何操作,直接调用 Win32 API、执行大整数运算、日期时间计算、GUI 编程、进制转换、直接 XML/JSON/字符串配置操作......

答案3

为什么 Windows 不会自动将新安装的程序添加到 PATH?

应用程序的安装程序会将程序添加到路径中。当然,在 Linux 下也是如此。正如其他人提到的,Linux 中的许多软件包只是安装到/usr/bin或类似位置。

但是,Linux 中有一些应用程序(主要是那些未通过包管理安装的应用程序)会安装到不在路径中的目录中。通常,这些程序的安装程序会修改您的启动文件(例如~/.bashrc)或至少主动提出修改,以便将其自身添加到您的路径中。

但最终,无论是 Linux 还是 Windows,都由应用程序的安装程序来决定如何启动。

Linux 和 Windows 的应用程序的“组织策略”也存在差异:

  • Linux 场所最多应用程序,尤其是通过发行版包管理器安装的应用程序,位于/usr/bin或中/bin(通常通过符号链接相同)。库位于/usr/lib等中。

  • Windows 没有集中的包管理器,每个应用程序都将其文件(二进制文件、非共享库和静态数据)安装到应用程序目录中。

对于使用过 Windows 的人来说,“将所有东西都放在一个位置”的概念也有点奇怪。多年来,我广泛使用 Windows 和 Linux,所以我习惯了这两种系统,但这两种系统都有其优点和缺点。

通过名称/键盘启动应用程序

我愿意尝试一切可能的方法来结束我的烦恼。

对于像你我这样的键盘迷来说,Windows 中有多种替代方案:

开始菜单

请记住,Windows 几乎有总是有一个标准图形应用程序的启动机制,即“开始”菜单(可追溯到 Windows 95)和之前的“程序管理器”。大多数用户启动的是 GUI 应用程序,而不是命令行应用程序。即使对于像我这样的键盘迷来说,“开始”菜单也提供了一个简单的“搜索”功能,让我只需按下 Windows 键(

相关内容