2008-11-17 5 views
11

Ich möchte eine ausführbare Datei haben, die einige andere Programme aufrufen wird. Die Art, wie ich dies in Linux tun würde, ist mit einem einfachen Bash-Skript, das wie folgt aussieht:Wie lautet das Windows-Äquivalent eines UNIX-Shell-Skripts?

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

Was ist der beste Weg, um diese Art der Sache unter Windows zu tun?

Antwort

24

Werfen Sie einen Blick auf PowerShell, die am nächsten zu einer echten Skriptsprache wie Sie in Unix haben. Für einfache Dinge wie das einfache Ausführen einer Anwendung sollten Sie sich Windows-Befehlsskript-/MS-DOS-Batch-Dateien ansehen.

+0

Das primäre Problem mit PowerShell (zumindest für mich) ist, dass es derzeit in den meisten Windows-Versionen (einschließlich XP und Vista) nicht standardmäßig installiert ist. Es wird jedoch standardmäßig in Windows Server 2008 und Windows 7 enthalten sein: http://tinyurl.com/5jhh2f –

+0

Ja, PowerShell ist nicht standardmäßig auf Windows-Versionen außer Win7 installiert. Das ist eigentlich PowerShell v2. –

3

Batch-Dateien funktionieren für mich. Entfernen Sie einfach die erste Zeile in Ihrem Beispiel und es sollte in win32 cmd-Zeile genauso funktionieren.

Hinweis - Erstellen Sie eine Textdatei, benennen Sie sie mit der Erweiterung .bat, und verwenden Sie einen umgekehrten Schrägstrich anstelle eines Schrägstrichs.

+0

Er muss die Schrägstriche – sblundy

+0

true beheben, danke, dass Sie darauf hingewiesen haben. – Tim

7

Sie können eine Windows-Stapeldatei verwenden. Weitere Informationen finden Sie unter the Wikipedia article.

0

Im Allgemeinen wird die Windows-Befehlszeile (DOS) im Vergleich zu * nix als ziemlich verarmt betrachtet. Sie könnten etwas wie Cygwin oder PowerShell installieren, wenn Sie eine mächtige Befehls-Shell wünschen, oder Sie könnten sich große Schmerzen und Leiden bereiten, wenn Sie versuchen, DOS für all Ihre Bedürfnisse zu verwenden. :)

+0

Jedes Windows-Befehlsskript, das ich in den letzten Jahren geschrieben habe, läuft nicht unter DOS. Das einzige, was Sie von DOS erben, sind Teile der Syntax und der Befehle. – Joey

5

Ich verwendete Batch-Dateien. Und für einfache Beispiele, wie Sie oben gesagt haben, tue ich immer noch, aber mehr und mehr verwende ich python, um diese Art von Dingen zu tun. Es hat den zusätzlichen Vorteil, plattformübergreifend für diese seltenen Skripte zu arbeiten, die auf mehreren Plattformen tatsächlich sinnvoll sind.

Python ist nur eine von vielen Skriptsprachen, die Sie für diese Art von Dingen verwenden können. Perl, Ruby oder PHP sind vielleicht schneller. Ich finde, dass eine Skriptsprache mir eine reichhaltigere und leichter zu verstehende Syntax gibt, wenn ich etwas komplizierteres tun möchte, als ein Programm mit ein paar Standardargumenten zu starten.

+0

Einverstanden. Python ist dafür hervorragend. – Cybis

6

Solange wir * nix-Befehlszeilentools vorschlagen, würde ich Cygwin (http://www.cygwin.com) empfehlen, da es eine * nix-ähnliche Umgebung emuliert.

10

Es gibt eine Reihe von Skriptoptionen auf Windows:

  • Batch-Dateien
  • VBScript/CScript/JScript (sehr mächtig, wenn sie mit WMI kombiniert)
  • Powershell
  • Sie Perl installieren könnte, Python oder andere Engine
  • Sie können Unix-Tools zum Beispiel über Cygwin installieren, um die meisten gängigen Unix-Befehle auch in Windows verfügbar zu machen.
  • Da wir alle (meist?) Programmierer hier sind, hält Sie nichts davon ab, eine .exe-Datei zu machen, um das zu tun, was Sie wollen.
+0

Um es klar zu sagen, die Verwendung von Powershell erfordert jetzt auch eine Installation. – EBGreen

0

WScript.CreateObject ("Scripting.FileSystemObject");

war meine win32 Waffe der Wahl in letzter Zeit.

0

Ich verwende eine Kombination von CScript/JScript. Sehr mächtig, sobald Sie die verfügbaren Systemobjekte kennen gelernt haben.

6

Die Windows NT-Familie von Betriebssystemen (NT 3.51, NT 4.0, 2000, XP, Vista) haben eine einigermaßen leistungsfähige Befehlsshell, auch wenn es ein bisschen esoterisch ist. Diese Shell hat nicht die Macht der typischen UNIX-Shells, aber sie ist auf Windows-Rechnern allgegenwärtig und es ist ziemlich erstaunlich, was erreicht werden kann. Ein großartiges Buch dafür ist Windows NT Shell Scripting von Timothy Hill. Ich fand immer Rob van der Woude's Scripting Pages eine großartige Ressource für Batch-Dateien.

PowerShell ist Microsofts neuestes Angebot in diesem Bereich und bringt Scripting auf eine ganz neue Ebene und bietet Ihnen Zugriff auf alle Möglichkeiten des .NET-Frameworks sowie WMI, COM und andere Schnittstellen zu Windows. Es ist eine ziemlich steile Lernkurve, aber es ist definitiv der Weg zu gehen und ich denke, es hat das Potenzial, eine dieser grundlegenden Technologiefähigkeiten (wie RegEx, XPath usw.) in der Microsoft-Welt zu werden. Ein guter Ausgangspunkt ist Microsoft Windows PowerShell Technology Center, aber dafür gibt es eine riesige Anzahl von Ressourcen.

+0

Rob vandr Woudes Skriptseiten sind jetzt hier: http://www.robvanderwoude.com/batchfiles.php – JohnnyLambada

+0

Link korrigiert, danke Johnny. –

3

Update: Wow, das ist jetzt leider veraltet (obwohl das unvermeidlich ist). Powershell wird mehr und mehr die Sprache der Wahl für die Automatisierung in Windows. Es hat viele Vorteile einer beliebigen .net-Sprache (wie C#), kombiniert mit einem Großteil der Zweckdienlichkeit, die in jeder guten Shell-Sprache existiert, ohne die schwerwiegenden Nachteile von Batch-Dateien.

Für was es wert ist, die beliebtestenen Optionen, die ich in einer bestimmten großen, Redmond Softwarefirma (in grober Reihenfolge der Beliebtheit) gesehen habe:

  • Batch-Dateien
  • Perl
  • Windows- Scripting Host (Javascript)
  • Tiny Ex

Viel weniger beliebt:

  • Powershell

Beachten Sie, dass Perl nicht eine Installation erforderlich ist, es erfordert nur wenige Umgebungsvariablen-Updates, so ist es einfach nur eine vollständige Distribution in Ihrem Source-Control-System schieben zusammen mit anderen Werkzeugen.

Meine persönliche Vorliebe wäre es, Batch-Dateien so viel wie möglich zu vermeiden, selbst mit den sorgfältigsten und rigorosesten Prozessen ist der Nutzen für die Kosten es einfach nicht wert. Sie werden nie mit einer zufriedenstellenden Lösung enden, wenn Sie Batch verwenden. Perl und Javascript sind verlockend zu benutzen, aber es gibt einige grundsätzliche Mängel, die sehr zu wünschen übrig lassen. Ohne starke Entwicklungsrichtlinien werden diese Methoden eher zu schlechtem Code führen.

Python und Powershell sind gute Kandidaten, aber ich bin nicht ausreichend mit ihnen vertraut und, noch wichtiger, eine Menge Leute sind nicht so vertraut mit ihnen. Vielleicht ist das keine gute Ausrede.Tiny Exes können ebenfalls viele Probleme haben und erfordern Disziplin und Prozess, um sicherzustellen, dass die Quelle immer eingecheckt wird, dass die Exes bestimmten UI-Normen entsprechen (zB haben sie nützliche Hilfe, wenn Sie -? Oder /?), Dass Sie haben einen offensichtlichen Besitzer, der Prozess für die Aktualisierung der EXE ist erkennbar, etc.

3

Als Alternative zur Windows-Befehlszeile, die nicht sehr Windows-freundliche Cygwin oder die schrullige und langsame Powershell, könnten Sie Hamilton C shell betrachten . Ich bin der Autor, also bin ich vielleicht voreingenommen, aber ich bin eine echte Person und ich versuche, meine Kunden glücklich zu machen. Die Hamilton C-Shell ist eine vollständige Nachbildung der C-Shell und der Utilities von UNIX, ist aber für Windows völlig neu und entspricht daher den Windows-Konventionen für Dateinamen und so weiter. Ich habe gerade diesen Sommer eine neue Version für Vista veröffentlicht, die sowohl 32-Bit- als auch 64-Bit-Builds enthält. (Die 64-Bit-Version ist etwa 2x bis 3x so schnell wie die 32-Bit-Version.) Es gibt eine kostenlose Demo, so dass Sie es vor dem Kauf ausprobieren können.

0

Hier ist ein Beispiel für eine Batchdatei, die ich vor einiger Zeit für jemanden gemacht habe.

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 

Beachten Sie, dass das Skript das 7z.exe Programm in einem Ordner namens Backup in dem Leistung-% homedrive% Standort hat erwartet. Ich habe Envirnment-Variablen verwendet, um es für verschiedene Benutzer einfacher zu machen.

0

Während Shell haben sh -C ${custom command}.

Versuchen auf cmd /C ${custom command} wo $ {benutzerdefinierten Befehl} stehen für den Befehl, den Sie noch ausgeführt werden soll.