batch-file - tutorial - run bat file from cmd
Limitación impar en tuberÃas en batfile en XP (2)
A veces, si falta algo en el registro, debe agregarlo a mano para que funcione. O bien, obtenga un editor BAT de Windows avanzado, que ampliará las posibilidades de su script por lotes en los comandos de Windows estándar y demás. En cuanto a esto, generalmente anexan y convierten su archivo por lotes en exe, ya que el ejecutable es el motor para ampliar las capacidades. La mayoría de ellos son shareware, pero, fíjate en sus especificaciones, en este caso, todo lo que necesitas es un editor simple con motor que extraiga el archivo por lotes al directorio temporal y lo ejecute. Probablemente no necesite algo que esté hecho para ofuscar su archivo por lotes.
Un archivo BAT que creé en mi sistema XP Pro SP3 funciona perfectamente todo el tiempo.
Instalado en otro sistema XP [también Pro SP3], falla ("cuelga") cada vez.
El problema resulta ser una tubería de pasos múltiples. Para aislarlo seguí simplificando hasta que llegué a este caso de prueba mínima [y artificial]
echo. | date | find "/" | find "/" | find "/"
Nota: los primeros dos pasos no se acortan a la date /t
porque algunos de los sistemas del usuario son anteriores a XP [y por lo tanto carecen de extensiones de comando]. Además: pruebas cuidadosas muestran que la date
está ejecutando el comando de DATE
interno de MS-DOS y find
está ejecutando el vainilla "FIND.EXE, 4 de agosto de 2004, 9216" que se encuentra en "C: / WINDOWS / system32 /" [e idéntico a la seguridad copiar en "C: / i386 /"].
En el sistema que falla, cada comando con 4 o más | s se bloquea en el quinto paso, incluso cuando, como aquí, los programas son simples y la cantidad de texto que están manejando es minúsculo.
Realicé algunas pruebas adicionales en el sistema del usuario ayer y descubrí una sutileza de la que no tenía conocimiento. Ingresé el comando simplificado [arriba] en el símbolo del sistema. Falló ["colgó"] como se esperaba. Sin embargo, cuando reinicié e intenté de nuevo antes de hacer algo más [un caso que nunca ocurriría en la operación normal del usuario], obtuve un impacto: funcionó [es decir, el resultado del comando DATE de MS-DOS apareció como se esperaba]. Funcionó de nuevo. Luego, en el tercer intento, reapareció el modo de falla y se mantuvo constante a partir de entonces.
Confirmé que los files=40
están vigentes en ambos sistemas, y me rendí. Todavía tengo curiosidad, pero no puedo dedicar mucho tiempo a un proyecto pequeño para un cliente pro bono analizando un problema para el que tengo soluciones fáciles.
Gracias a todos aquí por sus respuestas rápidas y útiles.
En el sistema original, los comandos con 4 o más | s funcionan correctamente independientemente de qué programas se invoquen y de cuánto texto [dentro de lo razonable] estén manejando.
Una vez que se reconoce la limitación, hay muchas soluciones triviales, por lo que mi pregunta es únicamente de curiosidad: ¿alguien puede sugerir de dónde viene el límite y si hay una configuración [en XP] que lo eleve / elimine?
Nota: Ni HKEY_LOCAL_MACHINE / Software / Microsoft / Command Processor / AutoRun ni HKEY_CURRENT_USER / Software / Microsoft / Command Processor / AutoRun existe en ninguno de los sistemas.
Además: me disculpo por responder a los comentarios al editar repetidamente mi publicación original, pero no importa qué navegador utilizo para iniciar sesión, nunca aparece la ventana emergente "agregar comentarios" [o lo que se supone que es]. Quizás mi entendimiento de que agregar un comentario a mi propia publicación no requiere puntos de reputación es erróneo. Sin embargo, ahora veo que "mostrar # más comentarios" tampoco funciona.
Finalmente: el problema que estoy teniendo al utilizar este sitio [el síntoma principal de que es el mensaje de la consola de JavaScript "Uncaught ReferenceError: StackExchange no está definido"] es el mismo que se discute aquí https://meta.stackexchange.com/questions/117730 / stack-overflow-onclick-actions-broken hace un año.
Usa ^ para evitar el caracter especial
ejemplo echo. ^ | fecha ^ | encuentra "/" ^ | encuentra "/" ^ | encontrar "/"