什么是Windows下类似UNIX shell脚本的替代方案?

27

我想要一个可执行文件,可以调用其他程序。在Linux中,我可以使用一个简单的bash脚本来做到这一点,它看起来像这样:

#!/bin/bash
echo "running some-program"
/home/murat/some-program arg1 arg2

在 Windows 下,做这种事情的最佳方式是什么?

15个回答

31

看一下PowerShell,这是你在Windows中最接近类Unix脚本语言的工具。除此之外,对于简单的操作比如运行程序,可以使用Windows命令脚本/MS-DOS批处理文件。


对我来说,PowerShell的主要问题是它目前在大多数Windows版本(包括XP和Vista)上默认未安装。然而,在Windows Server 2008和Windows 7中,PowerShell将会预装:http://tinyurl.com/5jhh2f - Jon Schneider
1
是的,除了Win7之外,任何版本的Windows默认情况下都没有安装PowerShell,而Win7实际上将是PowerShell v2。 - Scott Dorman

16

12

Windows上有多种脚本选项:

  • 批处理文件
  • VBScript/CScript/JScript(与WMI结合时非常强大)
  • PowerShell
  • 您可以安装Perl,Python或其他引擎
  • 您可以安装Unix工具,例如通过Cygwin,以便在Windows中使用大多数常见的Unix命令。
  • 由于我们都是(大多数?)程序员,因此没有什么阻止您制作一个.exe文件来完成所需的任务。

1
只是为了明确起见,现在使用PowerShell也需要安装。 - EBGreen

10

7
Windows NT系列操作系统(NT 3.51、NT 4.0、2000、XP、Vista)拥有一个相当强大的命令行壳,尽管它有点晦涩难懂。这个壳并没有典型的UNIX shell那么强大,但是它在Windows机器上无处不在,而且可以实现很多惊人的功能。Timothy Hill的Windows NT Shell Scripting是一本非常好的书籍。我总是觉得Rob van der Woude's Scripting Pages是批处理文件的一个很好的资源。

PowerShell是微软在编程领域的最新产品,它将脚本编写提升到了一个全新的水平,并为您提供了访问.NET框架、WMI、COM以及任何其他与Windows交互的接口的全部功能。虽然学习曲线比较陡峭,但它绝对是一种值得掌握的技能,我认为它有潜力成为微软世界中那些基础技术技能(如RegEx、XPath等)之一。一个很好的起点是Microsoft Windows PowerShell Technology Center,但是这方面的资源非常丰富。


1
Rob vandr Woude的脚本页面现在在这里:http://www.robvanderwoude.com/batchfiles.php - JohnnyLambada

6
我曾经使用批处理文件。对于像您上面提供的简单示例,我仍然这样做,但越来越多地我一直在使用python来做这些事情。它具有跨平台工作的额外好处,适用于那些实际上在多个平台上有意义的脚本。
Python只是许多可用于此类事情的脚本语言之一。Perl、Ruby或PHP可能更适合您。我发现,如果我想做一些比仅仅使用几个默认参数启动程序更复杂的事情,脚本语言给了我一个更丰富和易于理解的语法。

6
只要我们在推荐*nix命令行工具,我建议查看Cygwin(http://www.cygwin.com),因为它模拟了一个类似于*nix的环境。

5
更新:哇,现在这个已经过时了(虽然这是不可避免的)。 Powershell 在 Windows 自动化方面肯定越来越成为首选语言。它具有任何 .net 语言(如 C#) 的许多优点,结合了任何好的 shell 语言所存在的许多迅捷性,而没有批处理文件的严重缺点。
就我所知,在某个大型的、总部位于雷德蒙德的软件公司中,最受欢迎的选项是(按受欢迎程度排序):
- 批处理文件 - Perl - Windows 脚本宿主(Javascript) - 微小的 exes
不太受欢迎的有:
- Powershell
请注意,Perl 不需要安装,只需要更新一些环境变量,因此可以轻松地将完整的发行版与其他工具一起推送到源代码控制系统中。
我的个人喜好是尽可能避免使用批处理文件,即使是最仔细和严格的流程,成本的收益也不值得。如果使用批处理,你永远不会得到令人满意的解决方案。Perl 和 Javascript 很诱人,但存在一些麻烦的根本性缺陷,留下了许多不尽如人意的问题,如果没有强有力的开发指南,这些方法很可能会导致低质量的代码。
Python 和 Powershell 是不错的选择,但我对它们不够熟练,更重要的是,很多人对它们并不熟悉。也许这不是一个足够好的借口。微小的 exes 也可能存在许多问题,并需要纪律和流程,以确保源代码始终得到检查,exes 符合某些 UI 规范(例如,如果运行 -? 或 /?,它们具有有用的帮助),它们有一个明显的所有者,更新 exes 的过程是可发现的等等。

4

批处理文件对我来说很有效。只需删除您示例中的第一行,它应该在win32命令行中起作用。

注意 - 创建一个文本文件,将其命名为.bat扩展名,并使用反斜杠而不是正斜杠。


1
他需要修复斜杠。 - sblundy

4
作为一个替代性方案,相对于功能不足的Windows命令行、不太友好的Cygwin或者古怪而缓慢的Powershell,你可以考虑使用Hamilton C shell。我是作者,所以我可能有偏见,但我是一个真实存在的人,并且我关心尝试让我的客户满意。Hamilton C shell是UNIX C shell和工具的完整重建,但所有内容都是从头开始为Windows设计的,因此它旨在遵循Windows的文件名约定等。今年夏天,我发布了一个新版本,包括32位和64位版本(64位版本比32位版本快2到3倍)。有一个免费的演示版本,所以你可以试用后再购买。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接