batch file - etiquetas - Eliminar los ceros iniciales en el archivo por lotes
ejemplos de archivos por lotes (4)
El comando de salida es bastante bueno para borrar los ceros iniciales:
>set n=0000890
>cmd /c exit /b %n%
>echo %errorlevel%
890
Con esto, puede usar un número de hasta 32 bits de límite entero y el fragmento de código es realmente pequeño, a pesar de que una llamada adicional de cmd.exe podría dañar el rendimiento.
En mi solicitud, obtengo un número que tiene ceros iniciales. Estoy tratando de recortar los ceros iniciales y obtener el número real. Intenté usar /a
interruptor que considera el lado derecho de la asignación como una expresión aritmética. Así que intenté:
SET /a N = 00027
Lo anterior me dio la salida de 23, que es el equivalente decimal del número octal 27 . Entonces encontré esta solución en línea.
SET N = 00027
SET /a N = 1%N%-(11%N%-1%N%)/10
Esto parece funcionar y está dando la salida 27 . ¿Hay una forma mucho más fácil de recortar los ceros iniciales en un archivo por lotes?
El método que encontraste es muy bueno. Admite números de hasta 99,999,999 y es muy rápido.
Hay una forma más sencilla de usar SET / A que funciona con números hasta 9999. Utiliza la operación de módulo. El método no puede extenderse a números más grandes.
set n=0027
set /a n=10000%n% %% 10000
El método FOR / F que publicó Dale funciona con "cualquier" número de tamaño (hasta 8191 dígitos). Sin embargo, necesita un poco más de trabajo para manejar los valores cero.
set n=000000000000000000000000000000000000000000000000000027
for /f "tokens=* delims=0" %%N in ("%n%") do set "n=%%N"
if "%n:~0,2%"=="00" set "n=0"
Es posible hacer lo mismo con una sola línea, sustituyendo ||
para la declaración de FI. La instrucción FOR / F genera un error silencioso si no hay iteraciones.
set n=000000000000000000000000000000000000000000000000000027
(for /f "tokens=* delims=0" %%N in ("%n%") do set "n=%%N")||set "n=0"
Puede utilizar FOR /F
para eliminar los ceros iniciales.
C:/>SET n=00030
echo off
for /f "tokens=* delims=0" %a in ("%n%") DO echo %a
30
Como puede ver, los delims
están establecidos en 0. Esto hará que 0 sea un delimitador. Al mismo tiempo, con tokens
de *
esto asegurará que los 0 iniciales se eliminarán, mientras que el resto de la línea se procesará (incluidos los 0 finales).
Puede consultar robvanderwoude.com/battech_leadingzero.php para obtener más información sobre la eliminación de los 0 principales.
PS. Recuerde usar %%a
lugar de %a
cuando esté ejecutando un archivo por lotes en FOR /F
Si solo es cuestión de eliminar todos los ceros, puede hacerlo de la siguiente manera:
> SET n=00000002304650620000.23094400
> SET n=%n:0=%
2346562.23944