"1 >;& amp"2"¿Qué significa?
Los símbolos de redireccionamiento incluyen principalmente: >, >>, <, >&, <& y |.
Primer párrafo
Hablemos primero de una pregunta clásica, “1 > nul 2 & gtNul” significa proteger la salida normal y la salida de error, por lo que inmediatamente sabemos que 1 aquí representa Normal salida (la llamada "salida estándar" - stdout), 2 representa la salida de error (la llamada "salida de error estándar" - stderr).
1 y 2 son en realidad los códigos numéricos para los identificadores stdout y stderr. En cuanto a lo que es una manija, creo que se puede entender como una señal de algo, o que la manija apunta a algo. Por ejemplo, la "salida estándar" se identifica mediante el identificador stdout, o el identificador stdout apunta a "salida estándar".
También hay un identificador: stdin, que es el llamado signo de "entrada estándar", y el código numérico es 0. Hay otros 3~9 disponibles, pero no definidos.
La "salida estándar" y la "salida de error estándar" se envían al icono de la consola (es decir, la ventana cmd) de forma predeterminada, mientras que la "entrada estándar" se ingresa mediante el icono de la consola (es decir, el teclado) de forma predeterminada, por lo que el propósito de la redirección Sí
Sí, redirige el iostream desde la ubicación predeterminada a una nueva ubicación. El código de manejo predeterminado de los símbolos ">" y "> > es 1, y "
Se puede decir que las declaraciones como "echo hhhhhh" nos resultan familiares, pero este es solo un estado predeterminado. De hecho, hay algo de contenido en él. La oración completa debería ser así: "echo.
hhhhhh 1>con 2>Con" significa enviar la salida estándar y la salida de error estándar en el resultado del comando echo a la consola con, pero en este momento Estándar la salida de error está vacía.
Pongamos otro ejemplo. Si le da a dir un parámetro incorrecto, como "dir /mm", entonces será "dir/mm 1>Concentración
2>Con", pero la salida estándar en este momento está vacía. Si escribe "dir/mm 1 > Hero.txt", el mensaje de error se mostrará en la pantalla como de costumbre, pero no habrá contenido en hero.txt.
Para dar otro ejemplo de entrada estándar, "set /p var= "en realidad debería ser así" set /p var=
0 & ltCon", sólo porque 0< / p>
0 & ltFile.txt ", 0 es el valor predeterminado y se puede omitir.
Nul representa "dispositivo vacío", es decir, un dispositivo que no existe. Redirigiendo la salida transmitir a un dispositivo vacío es equivalente a enmascararlo. Y si lee la entrada de un dispositivo vacío, naturalmente no se puede leer nada, pero es una entrada, que es "set/p var =
Parte 2<. /p>
Bien, dicho esto, creo que todos comprenden mejor la salida y la entrada redirigidas. No entraré en detalles aquí sobre la redirección de la salida a archivos y la redirección de la entrada desde archivos. Lo siguiente de lo que quiero hablar es de "redirección" entre códigos de identificador.
¿No dijiste antes que hay siete números de manija del 3 al 9? ¿Para qué son estos? Para ser honesto, es básicamente inútil, por lo que te sugiero que no leas esta parte si no estás ansioso por entender.
" echo hero 1 > Hero.txt" redirige la salida estándar al archivo hero.txt, lo que equivale a cambiar el puntero del código de identificador 1 de con a hero.txt." echo hero 3 >hero.txt 1<&3", el resultado de esta oración es generar el archivo hero.txt, el contenido es hero, el proceso es así: "3>Hero.txt" es cambiar el código del número de identificador 3 La dirección cambia de "nula" a Hero. txt "1<&3" es un puntero que copia el puntero del código numérico de identificador 3 en 1.
En este momento, el puntero de 1 es hero.txt, por lo que
la salida estándar se redirige a las funciones hero.txt "i & lt& ampj" y "i & gt& amp "J" para copiar el archivo. dirección de J Vaya a I.." Echo Hero & gthero.txt2 & gt& amp frase "1" significa que tanto la salida estándar como la salida de error estándar serán redirigidas a hero.txt. El proceso específico es: se cambia la dirección de 1 de con a hero.txt, "2 > & amp1" copia el punto de 1 a 2, y el punto de 2 también se convierte en hero.txt, por lo que tanto 1 como 2 serán redirigidos a hero.txt. símbolo ">", el código numérico de identificador predeterminado. Mire "Echo Heroes"
3 & gtHero.txt ", ¿por qué esto no puede redirigir los resultados a un archivo? Recuerde, solo necesitamos redirigir la entrada estándar, la salida estándar y la salida de error estándar, por lo que Realmente "funciona"
Sólo hay 0, 1 y 2, porque se refieren a los tres primeros respectivamente, y 3 no se refiere a ningún identificador y sólo se puede utilizar como una cantidad indirecta "más". 3 <hero.txt 0 & gt& "amp3" es el archivo de visualización hero.txt, el proceso específico es: "3
hero.txt, "0 & gt& amp3" copia el punto de 3 a 0, es decir, el punto de 0 a hero.txt (solo esto Lee los datos de hero.txt veces). Se enfatiza que los datos reales que se pueden leer son 0, no 3, y 3 solo se usa como cantidad intermedia. Por supuesto, podemos escribir la oración ahora como: "Más0
Otro ejemplo es "Echo Heroes 5 & gthero.txt 4 & gt& amp五
3 & lt& amp4 1 & lt ;&3", el resultado se envía a hero.txt. El proceso específico: la dirección de 5 se convierte en hero.txt, "4>&5" copia la dirección de 5 a 4, "3>&4" copia 4 en el dirección de 3, "1>&3" copia el punto de 3 a 1, y el último punto de 1 es hero.txt, luego la salida estándar a la que hace referencia 1 se redirige a hero.txt
Parte. 3
Nota: El contenido de esta sección se describe en torno a los siguientes ejemplos
Copiar contenido al código del portapapeles: @echo off
Echo the hero is. ¡un buen hombre!
Echo 1>nul 3>empty
Echo el héroe es
Aike, ¿qué está pasando? No puede ser 1 >con 4. >Lectura intensiva
Pausa, ¿por qué el resultado es tan inesperado?
Esto implica un problema llamado "backup", es decir, antes de modificar un punto en el código del identificador, el El sistema hará una copia de seguridad del origen del código de identificador en el primer código de identificador con un punto vacío hasta el momento. El propósito es utilizar esto al final de la línea, se recomienda que el sistema encuentre la dirección original. que prepare un lápiz y papel antes de continuar leyendo, para que pueda registrar los cambios de cada punto del código para evitar confusiones. Centrémonos en la oración "echo. 1>nul 3>Nul". primer paso: ejecute "1>Nul", el punto 1 es el valor predeterminado con, y los puntos del código 3 ~ 9 están todos vacíos (valor inicial), por lo que el sistema respaldará el punto 1 al 3 (porque 3 es el primero)
Código vacío), punto 3 con. En otras palabras, el sistema copia el origen de 1 a 3, es para encontrar el origen después de la declaración, lo que equivale a una copia de seguridad. Paso 2: Ahora son las 3 en punto, pero debido a que se ejecuta "3>Nul", 4 está vacío en este momento y el sistema devolverá 3. Copiado a con, significa que 4 ahora apunta a con, lo que significa. ese 3 está respaldado por 4. Paso 3: Porque "3 > Nul" agrega 3 puntos a nul Paso 4: Al final de esta oración, 1. Necesita encontrar su dirección original De la descripción anterior, sabemos. ese 3 es la copia de seguridad de 1, por lo que 1 necesita restaurar su dirección "original" a través de 3, pero en este momento la dirección de 3 se ha vuelto nula, por lo que 1 apunta a nulo.
Paso 5: Para restaurar la orientación original, necesitamos encontrar 4, que apunta a con, por lo que 3 se restaura a CON, el origen de 4 está vacío y su copia de seguridad está en 5, por lo que el punto de 4 se restaura a vacío; .
Aclaremos esto. Ahora 1 punto es nulo, 2 puntos son el valor predeterminado con, 3 puntos son con y 4 puntos son ninguno. Luego, cuando se ejecutan las dos últimas declaraciones de eco, la pantalla se bloquea porque 1 apunta a nulo, es decir, la salida estándar se redirige al dispositivo nulo.
Echemos un vistazo a esta oración, "echo, ¿qué está pasando? ¿No puedes regañar al héroe? 1>con 4>¿Cómo funciona la oración "con"? Paso 1: 1 Actualmente apunta a nulo, porque necesita ejecutar "1 > Con", por lo que se realiza una copia de seguridad. Pero en este momento, el punto 3 está en contra de con, por lo que el sistema respalda el punto 1 en el punto 4, lo que significa que el punto 4 está en contra de nul. Paso 2: Debido a que se está ejecutando "4>Con", 4 ahora apunta a nulo y se respalda en 5, y las cosas después de 5 se omiten. Paso 3: Después de ejecutar "4>con, 4 apunta a con.
Paso 4: Después de que finalice esta línea del programa, 1 apuntará a 4. 4 apunta a con, por lo que 1 apunta a con, restaurando así el estado predeterminado. 4 encuentra 5, y 5 puntos son nulos, por lo que 4 puntos son nulos. Echemos un vistazo a la situación actual nuevamente. 0 puntos con, 1 punto con, 2 puntos con, 3 puntos con no moverse, 4 puntos nulo, 5 puntos ninguno. ¿Será un poco complicado? Luego míralo unas cuantas veces más. Realmente no tengo buenas ideas. Sección 4 Ya sabemos que "Echo Heroes" es equivalente a "Echo Heroes 1>con 2>Con", que representa la consola y puede considerarse como un archivo especial. Es por eso que no podemos usar ">" y "">. > "Crea un archivo llamado con. para hacer un análisis del mecanismo de redirección. Cuando el archivo a redirigir tiene atributos ocultos o del sistema, ">" funciona bien, pero ">" no, supongo que para ">" si el archivo no existe, por supuesto crea el archivo. si el archivo existe, elimine el archivo primero y luego cree un archivo nuevo.
En otras palabras, en lugar de sobrescribir el contenido del archivo, debe eliminar el archivo primero y luego crear un archivo nuevo. A través de la explicación en la Sección 3, deberías entender por qué. Como "echo hero > nul & gtcon & gthero.txt & gtCon", cualquiera que sea el último.
Lo último que debes tener en cuenta es que es redirigido. la salida no se puede enviar a un archivo de solo lectura