por lotes etiquetas ejemplos crear copiar condicion con como ciclo batch bat archivos archivo batch-file zero trimming

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