什么是Windows等效的UNIX shell脚本?

时间:2008-11-17 21:03:47

标签: windows command-line shell batch-file

我想要一个可以调用其他程序的可执行文件。我在Linux中这样做的方法是使用一个简单的bash脚本,如下所示:

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

在Windows下执行此类操作的最佳方法是什么?

15 个答案:

答案 0 :(得分:24)

看看PowerShell,这是你在Unix中获得真正的脚本语言的最接近的地方。除此之外,对于简单的运行应用程序等简单的事情,请查看Windows命令脚本/ MS-DOS批处理文件。

答案 1 :(得分:14)

您可以使用旧的学校批处理文件(http://en.wikipedia.org/wiki/Batch_file),也可以使用全新的Windows PowerShell脚本(http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx)。

我使用批处理进行简单操作,使用PowerShell处理涉及数据处理的复杂脚本。

答案 2 :(得分:10)

Windows上有许多脚本选项:

  • 批处理文件
  • VBScript / CScript / JScript(与WMI结合使用时功能非常强大)
  • PowerShell的
  • 您可以安装Perl,Python或其他引擎
  • 您可以通过Cygwin安装unix工具,以获得Windows中大多数常用的unix命令。
  • 由于我们都是(大多数?)程序员,所以没有什么能阻止你制作.exe文件来做你想做的事。

答案 3 :(得分:7)

您可以使用Windows批处理文件。在the Wikipedia article中找到更多信息。

答案 4 :(得分:6)

只要我们建议使用* nix命令行工具,我建议您查看Cygwin(http://www.cygwin.com),因为它模拟了类似* nix的环境。

答案 5 :(得分:6)

Windows NT系列操作系统(NT 3.51,NT 4.0,2000,XP,Vista)具有相当强大的命令外壳,即使它有点深奥。这个shell没有典型UNIX shell的强大功能,但它在Windows机器上无处不在,而且可以实现的目标非常惊人。 Timothy Hill撰写的一本好书是Windows NT Shell Scripting。我总是发现Rob van der Woude's Scripting Pages是批处理文件的绝佳资源。

PowerShell是Microsoft在该领域的最新产品,它将脚本提升到一个全新的水平,让您可以访问.NET框架以及WMI,COM​​和Windows中任何其他界面的所有功能。这有一个相当陡峭的学习曲线,但它绝对是走的路,我认为它有可能成为微软世界中的基础技术技能之一(如RegEx,XPath等)。一个很好的起点是Microsoft Windows PowerShell Technology Center,但是有很多资源可供选择。

答案 6 :(得分:5)

我曾经使用过批处理文件。对于你上面提到的简单例子,我仍然这样做,但越来越多的我一直在使用python来做这些事情。它具有跨平台工作的额外好处,可用于在多个平台上实际有意义的罕见脚本。

Python只是众多可用于此类事情的脚本语言之一。 Perl,ruby或php可能更适合你的速度。我发现如果我想做一些比仅使用一些默认参数启动一个程序更复杂的东西,脚本语言会给我一个更丰富,更容易理解的语法。

答案 7 :(得分:3)

批处理文件适合我。只需删除示例中的第一行,它在win32 cmd行中应该相同。

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

答案 8 :(得分:3)

更新:哇,现在已经过时了(尽管这是不可避免的)。 Powershell无疑成为Windows自动化的首选语言。它具有任何.net语言(如C#)的许多优点,并结合了任何优秀shell语言中存在的大部分权宜之计,而没有批处理文件的严重缺点。

值得一提的是,我在一家位于雷蒙德的大型软件公司看到的最受欢迎的选项(粗略的受欢迎程度):

  • 批处理文件
  • 的Perl
  • Windows脚本主机(Javascript)
  • Tiny exes

不那么受欢迎:

  • Powershell的

请注意,Perl不需要安装,只需要一些环境变量更新,因此很容易将完整的发行版与其他工具一起推送到源代码管理系统中。

我个人的偏好是尽可能避免批处理文件,即使采用最谨慎和严格的流程,成本的好处也是不值得的。如果您使用批处理,您将永远不会得到满意的解决方案。 Perl和Javascript很容易使用,但有一些麻烦的基本缺陷会让人产生很多不足之处,如果没有强大的开发指导,这些方法很可能会导致低质量的代码。

Python和Powershell是很好的候选者,但我对它们并不熟悉,更重要的是,很多人并不熟悉它们。也许这不是一个足够好的借口。微小的exes也可能有很多问题,需要遵守纪律和流程,以确保始终检入源,exes符合某些UI规范(例如,如果你运行 - ?或/?它们有有用的帮助),他们有一个明显的所有者,更新exes的过程是可以发现的等等。

答案 9 :(得分:3)

作为动力不足的Windows命令行的替代方案,不是Windows友好的Cygwin或者古怪而又缓慢的Powershell,您可以考虑使用Hamilton C shell。我是作者,所以当然我可能有偏见,但我是一个真正的人,我真的很想让我的客户满意。 Hamilton C shell是UNIX C shell和实用程序的完全重新创建,但所有这些都是从头开始用于Windows,因此,它的设计遵循Windows约定的文件名等。我今年夏天刚刚为Vista发布了一个包含32位和64位版本的新版本。 (64位版本的速度是32位版本的2倍到3倍。)有一个免费的演示版,所以你可以在购买前试用。

答案 10 :(得分:0)

通常,与* nix相比,Windows命令行(DOS)被认为相当贫乏。如果你想要一个功能强大的命令shell,你可以安装像Cygwin或PowerShell这样的东西,或者你可以尝试使用DOS来满足你的所有需求,这会给你带来巨大的痛苦和痛苦。 :)

答案 11 :(得分:0)

WScript.CreateObject( “Scripting.FileSystemObject的”);

是我最近选择的win32武器。

答案 12 :(得分:0)

我使用CScript / JScript的组合。一旦你学会了可用的系统对象,就会非常强大。

答案 13 :(得分:0)

这是我之前为某人制作的示例批处理文件。

echo off
echo Backing up Images
%homedrive%\Backup\7z.exe a -tzip photos.zip %userprofile%\Photos\*.jpg %userprofile%\Photos\*.png %userprofile%\Photos\*.gif %userprofile%\Photos\*.bmp
echo Backing up Music
%userprofile%\Backup\7z.exe a -tzip music.zip %userprofile%\Music\*.mp3 %userprofile%\Music\*.wma %userprofile%\Music\*.ogg %userprofile%\Music\*.wav
echo All Done

请注意,该脚本希望将7z.exe程序放在%homedrive%位置的名为Backup的文件夹中。我使用了Envirnment Variables来让不同的用户更容易。

答案 14 :(得分:0)

虽然shell有SELECT name, usage_guidance, total_used_num, name LIKE CONCAT('%', ? , '%') as sort_field FROM tags WHERE ( name LIKE CONCAT('%', ?, '%') OR usage_guidance LIKE CONCAT(?, '%') ) AND name NOT IN ($in) ORDER BY sort_field DESC LIMIT 6

试试IF() $ {custom command} 代表您要执行的命令。