2008-11-17 23 views

Respuesta

24

Eche un vistazo a PowerShell, que es lo más cercano que obtendrá a un verdadero lenguaje de scripting como el que tiene en Unix. Aparte de eso, para cosas simples como simplemente ejecutar una aplicación, eche un vistazo al script de comandos de Windows/archivos por lotes de MS-DOS.

+0

El principal problema con PowerShell (al menos para mí) es que actualmente no está instalado por defecto en la mayoría de las versiones de Windows (incluidos XP y Vista). Sin embargo, se incluirá de fábrica en Windows Server 2008 y en Windows 7: http://tinyurl.com/5jhh2f –

+0

Sí, PowerShell no está instalado de manera predeterminada en ninguna versión de Windows excepto Win7, que en realidad será PowerShell v2. –

3

los archivos por lotes funcionan para mí. Simplemente elimine la primera línea en su ejemplo y debería funcionar igual en la línea win32 cmd.

nota: cree un archivo de texto, asígnele el nombre con una extensión .bat y use una barra invertida en lugar de una barra diagonal.

+0

Tendrá que arreglar las barras – sblundy

+0

cierto, gracias por señalarlo. – Tim

0

En general, la línea de comandos de Windows (DOS) se considera bastante empobrecida en comparación con * nix. Puede instalar algo como Cygwin o PowerShell si quiere un shell de comandos potente, o puede causar un gran dolor y sufrimiento para tratar de usar DOS para todas sus necesidades. :)

+0

Cada script de comandos de Windows que he escrito en los últimos años no se ejecutará en DOS. Lo único que hereda de DOS son partes de la sintaxis y los comandos. – Joey

5

Solía ​​usar archivos por lotes. Y para ejemplos simples como los anteriores, sigo teniendo, pero cada vez uso más el python para hacer este tipo de cosas. Tiene el beneficio adicional de trabajar en todas las plataformas para aquellos scripts raros que son realmente significativos en múltiples plataformas.

Python es uno de los muchos lenguajes de scripting que puede utilizar para este tipo de cosas. Perl, ruby ​​o php pueden ser más su velocidad. Me parece que un lenguaje de scripting me da una sintaxis más rica y fácil de entender si quiero hacer algo un poco más complicado que simplemente iniciar un programa con algunos argumentos predeterminados.

+0

De acuerdo. Python es excelente para esto. – Cybis

6

Siempre que sugiramos herramientas de línea de comandos * nix, recomendaría revisar Cygwin (http://www.cygwin.com) ya que emula un entorno * nix-like.

10

Hay una serie de opciones de script en las ventanas:

  • archivos por lotes
  • VBScript/CScript/JScript (muy potente cuando se combina con WMI)
  • PowerShell
  • Se podría instalar Perl, Python, u otro motor
  • Puede instalar herramientas de Unix, por ejemplo, a través de Cygwin, para obtener también la mayoría de los comandos comunes de Unix disponibles en Windows.
  • Como todos somos programadores (la mayoría?) Aquí, no hay nada que te impida crear un archivo .exe para hacer lo que quieras.
+0

Para que quede claro, el uso de powershell también requiere una instalación en este momento. – EBGreen

0

WScript.CreateObject ("Scripting.FileSystemObject");

ha sido mi arma preferida win32 en los últimos tiempos.

0

Uso una combinación de CScript/JScript. Muy poderoso una vez que aprende los objetos del sistema disponibles.

6

La familia de sistemas operativos Windows NT (NT 3.51, NT 4.0, 2000, XP, Vista) tiene un Command Shell razonablemente potente, incluso si es un poco esotérico. Este shell no tiene el poder de los cartuchos típicos de UNIX, pero es omnipresente en máquinas con Windows y es bastante sorprendente lo que se puede lograr. Un gran libro para esto es Windows NT Shell Scripting por Timothy Hill. Siempre encontré Rob van der Woude's Scripting Pages un gran recurso para archivos por lotes.

PowerShell es la última oferta de Microsoft en este campo y lleva las secuencias de comandos a un nivel completamente nuevo y le da acceso a toda la potencia de .NET framework, así como WMI, COM y cualquier otra interfaz en Windows. Hay una curva de aprendizaje bastante empinada con esto, pero definitivamente es el camino a seguir y creo que tiene el potencial de convertirse en una de esas habilidades tecnológicas fundamentales (como RegEx, XPath, etc.) en el mundo de Microsoft. Un buen punto de partida es Microsoft Windows PowerShell Technology Center, pero hay una gran cantidad de recursos disponibles para esto.

+0

Las páginas de Scripting de Rob Vandr Woude están ahora aquí: http://www.robvanderwoude.com/batchfiles.php – JohnnyLambada

+0

Enlace corregido, gracias Johnny. –

3

Actualización: Wow, esto está tristemente desactualizado ahora (aunque eso es inevitable). Powershell definitivamente se está convirtiendo cada vez más en el lenguaje de elección para la automatización en Windows. Tiene muchas de las ventajas de cualquier lenguaje .net (como C#) combinado con gran parte de la conveniencia que existe en cualquier buen lenguaje de shell, sin las serias desventajas de los archivos por lotes.

Por lo que vale la pena, las opciones más populares que he visto en una determinada empresa grande, Redmond basado en software (en orden aproximado de la popularidad):

  • archivos por lotes
  • Perl
  • de Windows Scripting Host (Javascript)
  • exes Tiny

mucho menos popular:

  • Powershell

Tenga en cuenta que Perl no requiere una instalación, que sólo requiere unos cambios de variables de entorno, por lo que es fácil de simplemente empujar una distribución completa en su sistema de control de código fuente junto con otras herramientas.

Mi preferencia personal sería evitar tanto como sea posible los archivos por lotes, incluso con los procesos más cuidadosos y rigurosos, el beneficio por el costo simplemente no lo vale. Nunca obtendrá una solución satisfactoria si usa lotes. Perl y Javascript son tentadores de usar, pero existen deficiencias fundamentales problemáticas que dejan mucho que desear, sin unas pautas de desarrollo sólidas. Es más probable que estos métodos conduzcan a un código de baja calidad.

Python y Powershell son buenos candidatos, pero no soy lo suficientemente hábil con ellos y, lo que es más importante, mucha gente no está familiarizada con ellos. Quizás esa no sea una excusa lo suficientemente buena.Las pequeñas empresas también pueden tener muchos problemas y requieren disciplina y proceso para asegurarse de que la fuente esté siempre registrada, de que las ex cumplen con ciertas normas de interfaz de usuario (p. Ej., Tienen ayuda útil si ejecuta -? O /?), Que tienen un propietario obvio, que el proceso para actualizar los archivos es detectable, etc.

3

Como alternativa a la línea de comandos de Windows poco potente, el Cygwin poco amigable para Windows o el Powershell peculiar y lento, puede considerar Hamilton C shell . Soy el autor, así que, por supuesto, estoy predispuesto, pero soy una persona real y me importa tratar de hacer felices a mis clientes. Hamilton C shell es una recreación completa de la shell y las utilidades de UNIX C, pero todo se trata desde cero para Windows y, como tal, está diseñado para seguir las convenciones de Windows para nombres de archivos y demás. Acabo de lanzar una nueva versión este verano para Vista que incluye compilaciones tanto de 32 bits como de 64 bits. (La versión de 64 bits es aproximadamente de 2x a 3x tan rápido como la versión de 32 bits). Hay una demo gratuita, para que pueda probarla antes de comprarla.

0

Aquí hay un ejemplo de archivo por lotes que hice hace un tiempo.

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 

Tenga en cuenta que el guión espera tener el programa 7z.exe en una carpeta llamada copia de seguridad en la ubicación% homedrive%. Usé Variables de medio ambiente para que sea más fácil para diferentes usuarios.

0

Mientras que el shell tiene sh -C ${custom command}.

prueba la cmd /C ${custom command} donde $ {} comando personalizado soporte para el comando que desea se ejecutan.

Cuestiones relacionadas