Quiero aprender programación BAT (50 puntos adicionales si estoy satisfecho)
Referencia rápida del lenguaje Bat
Soporte nativo para diferentes tipos de sistemas
Windows PowerShell proporciona soporte para objetos WMI, XML, ASDI, ADO y COM Adaptado a Proporcionar una sintaxis común para acceder a sus propiedades y métodos.
Ejemplo
$g = Get-WmiObject Win32_Process
$g[0].Nombre # en lugar de $g[0].Propiedades["Nombre" ]
Operadores binarios aritméticos
+ suma, concatenación
- resta
* multiplicación, repetición de cadenas
/ División
% módulo
Operaciones con matrices
Si esta matriz contiene 3
1,2,3,5,3,2 –contiene 3
Devuelve todos los elementos iguales a 3:
1,2,3,5,3,2 –eq 3
Devuelve todos los elementos menores que 3:
1,2,3,5,3,2 –lt 3
Prueba si 2 existe en el conjunto:
if (1, 3 , 5 –contiene 2)
Otros operadores: -gt, -le, -ge, -ne
Array
"a" , "b", matriz de cadenas "c"
matriz de enteros 1,2,3
@() matriz vacía
@(2) 1 matriz de elementos
1,(2,3),4 matriz contiene matriz
,"hi" Matriz de un elemento
$a[5] matriz El sexto elemento*
$a[2][3] El cuarto o tercer
elemento de la matriz
$a[2. .20] Devuelve el elemento 3 al 21 del matriz comenzando desde cero.
Operadores de asignación
=, +=, -=, *=, /=, %=
Matriz asociativa (tabla hash)
$hash = @{ } crea una tabla hash vacía
$h =@{foo=1;bar=2} crea e inicializa la tabla hash
$hash .key1 = 1 asigna 1 a la clave "key1"
$hash.key1 devuelve el valor de la clave1
$hash["key1"] devuelve el valor de la clave1
Valores booleanos y operadores
TRUE FALSE
$TRUE $FALSE
Todas las cadenas con una longitud mayor que 0 (excepto la palabra "falso") Cadena vacía O la cadena "false"
Todos los números distintos de 0 Todos los números iguales a 0
Arrays con longitud mayor que 1 Arrays con longitud 0
La longitud es 1, la longitud de la matriz cuyos elementos son VERDADEROS es 1 y la longitud de la matriz cuyos elementos son FALDOS
Referencia nula a todos los objetos
Break (script)
El comando break se utiliza para salir del bucle. Puede recibir una ETIQUETA opcional para salir
Ejemplo:
mientras (1)
{ $a = algo
if ( $a –eq 1) break;
}
Operador de expansión de comando
$( ) devuelve un valor nulo
$( 1 ,2,3) Devuelve una matriz que contiene 1, 2, 3.
$(Get-Alias a*) devuelve el resultado del cálculo de la expresión
@(Get-Alias;Get-Process) ejecuta dos de los comandos y los devuelve en el resultado de la matriz
Comentario
# Este es un comentario porque # es el primer carácter marcador
$a = "#Esto no es un comentario... "
$a = “algo” # …pero el signo # va seguido de un comentario.
Write-Host Hello#world
Operador de comparación
-eq es igual
-ne no es igual
-gt –ge mayor que, mayor o igual a
-lt –le menor que, menor o igual a
Puedes agregar "i" o "c" delante del operador para especificar operaciones que no distinguen entre mayúsculas y minúsculas o que distinguen entre mayúsculas y minúsculas (por ejemplo, –ceq)
Continuar (script)
La instrucción continuar significa continuar ejecutando la siguiente iteración de el bucle sin salir del bucle. Ejemplo:
mientras (1)
{ $a = algo
if ($a –eq 1) (continuar)
# Esta línea no se ejecutará a menos que $a sea igual a 1.
}
# Esta línea nunca será ejecutada.
Dot Sourcing
Dot Sourcing permite que funciones, bloques de secuencias de comandos y secuencias de comandos se ejecuten en el ámbito actual (en lugar de en el ámbito local). Ejemplo:
. MyFunction
Si MyFunction establece una variable, la variable se establece para el alcance actual (no el alcance local de la función).
$a = {$x = Get-Process | Select –First 2}
$a #Calcular el bloque de script en el alcance actual
Transferir.
El carácter de escape de Windows PowerShell es el apóstrofo invertido, que es `. Para formatear un carácter como texto, antepóngalo con `. Para especificar `, utilice ``.
Secuencias de escape especiales
`0 (nulo)
`a (alerta)
`b (retroceso)
`f (avance de página)
`n (nueva línea)
`r (retorno de carro)
`t (carácter de tabulación) p>
`v (comillas verticales)
Orden de ejecución
Windows PowerShell intenta analizar los comandos en el siguiente orden: alias, función, cmdlet, script, archivos ejecutables y normal. archivos.
Para (script)
[:label] para ([valor inicial]; [condición]; [valor de iteración]) {}
Ejemplo:
for ($i = 0; $i –lt 5; $i++) {Write-Object $i}
Foreach (script)
[:label ]
foreach (identificador en la colección) {}
Expresión | foreach {}
Expresión | foreach {BEGIN{} PROCESS{} END{} }
Ejemplo:
$i = 1,2,3
foreach ($z en $i) {Write-Object $z}
Get-Process |foreach {BEGIN{$x=1}
PROCESO{$X++}
END{“$X Procesos”}}
Función (script)
función MiFunción {
objeto de escritura $args[0]
}
prueba de función ([cadena] $label=”etiqueta predeterminada”,[int]$start=0)
{ COMENZAR {$x=$start} PROCESO {?label:$_'; >END{“$x total”}
}
Filtro (script)
El filtro es una forma abreviada de escribir funciones con un bloque de script PROCESS.
filtrar MiFiltro {
$_.name
}
If/elseif/else (script)
if (condición) {…}
elseif (condición) {…}
else {…}
En la línea de comando, la llave de cierre debe coincidir elseif y else van juntos. Esta restricción no se aplica a los scripts.
Llamar al operador
El operador & se puede utilizar para llamar al nombre de un bloque de script o comando/función.
Ejemplo:
$a = “Obtener-Proceso”
&$a
$a = { Obtener-Proceso Seleccionar | -Primeros 2 }
&$a
Operador lógico
!, -no, -y, -o
llamada al método
Se pueden invocar métodos en objetos.
Ejemplo:
$a = "Esto es una cadena"
$a.ToUpper()
$a.SubString(0,3)
$a.SubString(0,($a.length/2))
$a.Substring(($a.length/2), ($a.length/3))
Los métodos estáticos se pueden llamar usando el operador "::"
[DateTime]::IsLeapYear(2005)
Variables automáticas de Windows PowerShell (no todas enumeradas) )
$$ El último token de la línea de comando anterior
$? El estado booleano del comando anterior
$^ El primer token del comando anterior Etiquetas de línea
$_ Objeto de canalización actual
$Args Parámetros especificados para el script o función
$Error Matriz de errores del comando anterior
$Foreach se refiere al enumerador en el bucle foreach
$Home El directorio de inicio del usuario generalmente se establece en %HOMEDRIVE%\%HOMEPATH%
$Host se refiere a la aplicación; que aloja el lenguaje POWERSHELL Programa
$Input Un enumerador de objetos canalizados al script
$LastExitCode El código de salida del programa o script anterior
$Matches Utilice –match Tabla hash de coincidencias encontradas por el operador
$PSHome Dónde está instalado Windows PowerShell
$profile Perfil estándar (puede no existir)
$StackTrace Excepción anterior detectada por Windows PowerShell
Enumerador en la instrucción de cambio $Switch
Propiedades del objeto
Utilice el operador "." para hacer referencia directamente a la propiedad del objeto.
$a = Get-Date
$a.Date
$a.TimeOfDay.Hours
Utilice la operación "::" Los operadores pueden hacer referencia a propiedades estáticas
[DateTime]::Now
Precedencia de operadores
En Windows PowerShell, los operadores se evalúan en el siguiente orden de precedencia de: ( ) {}, @ $, !, [ ], ., &, ++ --, unario + -, * / %, binario + -, operador de comparación, -y –o, |, > > >, = p>
Otros operadores
, constructor de matrices
.. Operador de rango
-contiene
-es discriminador de tipos p>
-as tipo convertidor
-band binario y
-bor binario o
-bnot binario no
Retorno (script)
El comando return sale del script o función actual y devuelve un valor.
Ejemplo:
función foo {
devolver 1
}
Ámbitos (script)
Se pueden crear instancias de variables y otros elementos de datos en diferentes ámbitos: Las variables en el ámbito global son visibles para todos los ámbitos. Las variables en el ámbito de un script solo son visibles para todos los ámbitos del archivo de script. Las variables en el ámbito local solo son visibles en el ámbito actual y sus subámbitos. Las variables de ámbito privado solo son visibles para el ámbito actual.
Los ámbitos se crean dentro del cuerpo de la función de shell (ver Creación de funciones)
Ejemplo:
$global:a = 4
p>
$script:a = 5
$local:a = 3
$private:a = 6
Bloque de script p>
Los comandos y expresiones se pueden almacenar en bloques de script para su posterior ejecución.
Ejemplo:
$block = {Get-Process $a=1}
&$block
Script
Los comandos de Windows PowerShell se pueden almacenar y ejecutar desde archivos de script. Los scripts de Windows PowerShell tienen una extensión de archivo ".ps1". Los parámetros se pueden pasar a scripts y los scripts pueden devolver valores.
Ejemplo:
$sum = MyAdder.ps1 1 2 3
Cadena
Constante de cadena:
"Esta es una cadena, esta $variable se puede expandir a $(2+2)"
'Esto es una cadena, esta $variable no se puede expandir'
@"
Esta es la "cadena aquí", que puede contener cualquier carácter (incluidos retornos de carro y comillas). Se evaluará la expresión $(2+2)
"@". p>
@'
Una "cadena aquí" con comillas simples no evalúa la expresión. '@
Operador de cadena
+ Concatena dos cadenas
* Repite una cadena un número específico de veces
-f configuración Formato de cadena (especificador de formato .NET)
-reemplazar operador de reemplazo
"abcd" –reemplazar "bc", "TEST"
aTESTd
-coincidencia de expresión regular
-coincidencia de comodines
Cambiador (script)
Puedes usar la variable $_ en este script. $_ representa el valor que se está calculando actualmente. Si se utiliza una matriz en el conmutador, se probarán todos los elementos de la matriz.
Ejemplo:
$var = "palabra1","palabra2","palabra3"
cambiar -regex ($var) {
"palabra1" {"Coincidencia múltiple exacta " + $_ }
"palabra2" {"Coincidencia múltiple exacta " + $_ }
"w.*2" {"Coincidencia de patrón exacta " + $_ }
default {"Coincidencia múltiple predeterminada " + $_ }
}
Salida:
Palabra exacta de coincidencia múltiple 1
Palabra exacta de coincidencia múltiple 2
Palabra exacta de coincidencia de patrón 2
Palabra predeterminada de coincidencia múltiple 3
Throw
Throw proporciona la funcionalidad para scripts que la API ThrowTerminatingError proporciona para cmdlets.
tirar "Peligro, Peligro"
Peligro, Peligro
Línea: 1 Caracteres: 6
+ tirar <<<< " Peligro, Peligro"
Throw acepta una cadena, excepción o ErrorRecord como parámetros.
Trampa
Trampa [Tipo de excepción] {
si (...)
{ continuar
# Causado por La siguiente declaración después de la declaración del script de captura continúa;
# $ se actualizará, pero no se generarán registros de error
} else (…)
{ Break
# Lanzar la excepción nuevamente
}
# No realizar ninguna acción especificada en la configuración $ErrorActionPreference
#
}
Operaciones de tipo (scripts)
-es tipo IS (por ejemplo, $a -is [int])
-as convertir a tipo (por ejemplo, 1 -as [cadena] trata 1 como una cadena)
Hasta (script)
hacer
{
…
} hasta (condición)
Variable
Formato:
$[alcance:] nombre o ${cualquiera nombre} o $ {Cualquier ruta}
Ejemplo:
$a = 1
${!@#$%^&*()}=3
$global:a = 1 # Visible en todas partes
$local:a = 1 # Definido en este ámbito y visible para ámbitos secundarios
$private: a =1 # Igual que el ámbito local, pero no visible para los subámbitos
$script:a=1 # Visible para todos los ámbitos en este script
$env :path = “d:\ windows”
${C:\TEMP\testfile.txt}=”Esto escribirá en el archivo”
Get-Variable –scope 1 a # Obtener valor del alcance principal
Get-Variable –alcance 2 a #abuelo
Mientras (script)
[:label] while (condición)
p>{
…
}
hacer
{
…
} mientras (condición)
Análisis
Windows PowerShell se puede analizar en dos modos: modo comando y modo expresión. En el modo de expresión, Windows PowerShell realiza el análisis en el nivel más alto de análisis del lenguaje: si es un número, se representa tal cual; si es una cadena, debe estar entre comillas, y así sucesivamente. La expresión se expresa de la siguiente manera:
2+2
4
"Hola" + "mundo"
Hola mundo p>
$a = "hi"
$a.length * 13
26
Al analizar en modo comando, las cadenas de caracteres no necesitan entre comillas, y todo, excepto las variables y el contenido entre paréntesis, puede considerarse una cadena. Por ejemplo:
copiar usuarios.txt cuentas.txt
Users.txt y cuentas.txt se pueden tratar como cadenas
write-host 2+2
Piense en 2+2 como una cadena en lugar de una expresión a evaluar
copiar $src $dest
$src y $dest son variables.
A la larga, es de gran ayuda si no necesita usar comillas cuando trabaja en un shell de comandos, ya que esto reduce en gran medida la cantidad de escritura requerida.
El modo de análisis está determinado por el primer token encontrado. Si el token es un número, una variable o una cadena entre comillas, el shell lo analiza en modo de expresión. Si la línea comienza con una letra, & (y signo) o . (punto) seguida de un espacio o una letra, se analizará en modo comando.
2+2 es un patrón de expresión que comienza con un número.
"texto" comienza entre comillas como patrón de expresión.
El texto comienza con una letra como modo de comando.
& "texto" comienza con el carácter y como modo de comando.
. "file.ps1" comienza con un punto seguido de un espacio como patrón de comando.
.125 Los patrones de expresión comienzan con un punto seguido de un número (en lugar de espacios o letras).
.text Los patrones de comando comienzan con un punto como parte del nombre del comando ".text"
Es útil mezclar expresiones con comandos, esto se hace usando paréntesis en este punto; El proceso de descubrimiento de patrones comienza entre paréntesis.
Write-Host (2+2)
Pase 2+2 al comando Write-Host como expresión para evaluar.
(Get-Date).día + 2
Piense en Get-Date como un comando cuyo resultado de ejecución será el valor en el lado izquierdo de la expresión.
Puedes anidar comandos y expresiones sin restricciones.
Write-Host ((Get-Date).día + 2)
Get-Date es el comando. ((Get-Date).day+2) es una expresión y Write-Host ((Get-Date).day + 2) también es un comando.
Write-Host ((Get-Date) - (Get-Date).date)
Utilice el comando Get-Date dos veces para determinar el tiempo desde las 12 de la noche (condición) Cómo largo.