24

私のアプリケーションでは、先行ゼロを持つ数値を取得します。先頭のゼロを削除して実際の数を取得しようとしています。/a代入の右辺を算術式とみなすスイッチを使ってみました。だから私は試しました:

SET /a N = 00027

上記により、8進数27に相当する10進数である23の出力が得られました。次に、このソリューションをオンラインで見つけました。

SET N = 00027
SET /a N = 1%N%-(11%N%-1%N%)/10

これは機能しているようで、出力は27です。バッチ ファイルの先頭のゼロを削除する簡単な方法はありますか?

4

4 に答える 4

21

あなたが見つけた方法はとても良いです。99,999,999 までの数字をサポートし、非常に高速です。

9999 までの数値で動作する SET /A を使用する簡単な方法があります。これはモジュラス演算を使用します。メソッドをより大きな数に拡張することはできません。

 set n=0027
 set /a n=10000%n% %% 10000

Dale が投稿した FOR /F メソッドは、「任意の」サイズの数値 (最大 8191 桁) で機能します。ただし、ゼロ値を処理するにはもう少し作業が必要です。

set n=000000000000000000000000000000000000000000000000000027
for /f "tokens=* delims=0" %%N in ("%n%") do set "n=%%N"
if not defined n set "n=0"
于 2013-02-08T12:00:13.893 に答える
6

exit コマンドは、先頭のゼロをクリアするのに非常に優れています。

>set n=0000890

>cmd /c exit /b %n%

>echo %errorlevel%
890

これにより、32 ビット整数制限までの数値を使用でき、cmd.exe の追加呼び出しがパフォーマンスに悪影響を及ぼす可能性がありますが、コードの断片は非常に小さくなります。

于 2014-09-22T15:17:01.827 に答える
5

同様の問題を自分で解決しようとしたときに、この問題を見つけました。少し良い方法があることに気付くまで、私はあなたのソリューションが好きでした:

SET /a N=1%N%+1%N%-2%N%
于 2020-02-22T08:09:22.047 に答える
4

FOR /F先行ゼロを削除するために使用できます。

C:\>SET n=00030
echo off
for /f "tokens=* delims=0" %a in ("%n%") DO echo %a
30

ご覧のとおり、delimsは 0 に設定されています。これにより、区切り文字として 0 が作成されます。同時にtokensof*これにより、先頭の 0 が削除され、行の残りの部分が処理されます (後続の 0 を含む)。

先頭の 0 の削除の詳細については、このリンクを参照してください。

PSでバッチ ファイルを実行している場合は、%%a代わりにを使用することを忘れないでください。%aFOR /F

于 2013-02-08T08:57:52.750 に答える