batch-file
Errores en el procesador cmd.exe
Buscar..
Introducción
Este tema se centrará en los errores causados por los errores del procesador. Estas son las cosas en las que nos centraríamos en la causa y la solución del problema.
Observaciones
En el ejemplo de la Extensión de archivo DEL , el usuario X. Liu advierte que este error no se producirá cuando la extensión del archivo en el comando DEL
sea inferior a 3 caracteres.
Confusión de paréntesis
Desde este sitio web, el OP ha notado un problema.
Porque
Considere el siguiente fragmento de código.
if 1==1 (
set /a result = 2*(3+4)
)
A primera vista, puede pensar que CMD.exe
lo procesaría así:
- La condición es verdadera, ejecute el bloque de código.
- Establecer el valor del resultado variable a
14
- Continuar
Sin embargo, el proceso CMD.exe
es así:
- La condición es verdadera, ejecute el bloque de código.
- Calcule
2*(3+4
, el)
después de que 4 se procese al final deif
bloque de código - Un azar
)
ha aparecido!
El segundo paso devolvería un error de Unbalanced parentheses
.
Solución
De acuerdo con un set /?
de CMD.exe alemán set /?
, tendríamos que citar operaciones aritméticas. Aquí hay un ejemplo.
Anterior | Resultado |
---|---|
set /a result=2+5*4 | set /a result="2+5*4" |
Por cierto, de acuerdo con un set /?
CMD.exe en inglés set /?
, se requieren comillas si los operadores lógicos o de módulo están presentes en la expresión (aunque esto no es un paso obligatorio ).
Personaje de escape inadecuado
En esta pregunta de desbordamiento de pila , el usuario txtechhelp encontró un problema con el carácter ^
que podría causar un problema de seguridad.
Porque
anyInvaildCommand ^
Nota: ¡Asegúrate de que el caret ( ^
) sea el último carácter! ¡Cualquier CR\LF
adicional no funcionará en absoluto!
El caret busca al siguiente personaje para escapar. Sin embargo, ya no hay más personajes disponibles para escapar, por lo que cmd
recorre infinitamente, buscando un personaje para escapar. En este proceso de "bucle", cmd.exe
consumirá la memoria de su computadora. Y poco a poco devorando toda la memoria, llevando la computadora a las rodillas.
Este problema puede llevar a preocupaciones de seguridad más graves, ya que uno podría ingresar el código en la computadora desbloqueada.
Soluciones
Usar la página de códigos UTF-16 podría resolver este problema. Solo UTF-8 o ASCII causaría el error.
Asegúrese de que haya un
CR\LF
adicional en el archivo, o simplemente no use caret al final del archivo.
Extra
Este error parece estar resuelto en Windows 10.
Extensión de archivo DEL
Este error fue informado por steve2916 desde este hilo del Foro de Microsoft Windows.
Porque
Considere una carpeta con tales archivos.
TestA.doc
TestB.doc
TestC.docx
TestD.docx
Si queremos eliminar todos los archivos .doc
en este directorio, generalmente haríamos:
del *.doc
Sin embargo, este comando también elimina los archivos .docx
. Lo mismo sucede en las extensiones de archivo con este patrón.
Presentar un | Archivo b |
---|---|
Cualquier nombre. a B C | Otro nombre. abc d |
Como podemos ver, siempre que la cadena de extensión de archivo contenga la cadena utilizada en el comando del
, se eliminará el archivo. Tenga en cuenta que este error solo se produce cuando la cadena de extensión utilizada en el comando del
tiene al menos tres caracteres. Por ejemplo, del *.do
no elimina A.doc
o A.docx
.
Solución
En el hilo, el usuario MicroCompsUnltd notó que el uso de Powershell
resolvería el problema.