バッチファイルvbscriptで最後のスペースを印刷しない方法

Aug 24 2020

少なくとも1時間は理解しようとしてきたことについて質問があります。いくつかの複雑な計算を実行できるように、小さなVBSスクリプトを作成するバッチファイルがあります(少なくとも、コマンドプロンプトでは実行できないものもあります)。コードはとてもシンプルです

set /p APERTURE=Please enter f/stop aperture:
(
echo Wscript.Echo "Calculated APEX Value: ",round^(^(log^(%APERTURE%^)*^(2.0/log^(2.0^)^)*62500^)^),"/62500"
) >%temp%\calculate.vbs
cscript //nologo %temp%\calculate.vbs

しかし、私を終わらせない小さな問題があります。結果は次のように表示されます

Calculated APEX Value: 432429 /62500

本当に表示したいとき

Calculated APEX Value: 432429/62500

数字の間のスペースに注意してください。

このスクリプトは、最新バージョンのWindows 10(昨夜アップグレード)で実行されます。

ありがとう

回答

1 LPChip Aug 24 2020 at 04:34

問題は、wScript.echoのパラメーターの使用です。複数のパラメータを使用するとすぐに、各結果の間にスペースが入ります。それらを削除し、すべてを最初のパラメーターに入れる必要があります。、を変更すると、&(cmdの使用によりエスケープする必要があります)のすべてが1つのパラメーターになり、スペースがなくなります。

スクリプトは次のようになります。

set /p APERTURE=Please enter f/stop aperture:
(
echo Wscript.Echo "Calculated APEX Value: "^&round^(log^(%APERTURE%^)*^(2.0/log^(2.0^)^)*62500^)^&"/62500"
) >%temp%\calculate.vbs
cscript //nologo %temp%\calculate.vbs



LPChip Aug 26 2020 at 18:03

コメント交換を行い、PowerShellがいかに簡単で強力であるかについてのアイデアを提供するために、PowerShellで記述されたスクリプトを次に示します。

$aperture = read-host -Prompt "Please enter f/stop aperture" $APEX = [math]::Round([math]::log($aperture)*(2/[math]::log(2))*62500) $return = "Calculated APEX Value: $APEX/62500" set-clipboard -Value $return
write-host $return
ItWasn'tMe Aug 27 2020 at 02:03
  • ほんの少しの提案...

すべてのエスケープ削除^置き換えるechoことにより、set /p

入力/数値をテストするために1つlabelを使用します:loopfindstr regex

に置き換え//nologo| find "string"file.vbs実行後に削除する時間を取得します


@echo off

:loop
set APERTURE=<nul & <con: set /p APERTURE=Please enter f/stop aperture: 
<con: call echo\%APERTURE%|findstr [0-9] >nul || cls && echo\ && goto=:loop

>"%temp%\calculate.vbs" <nul set /p "'=Wscript.Echo "Calculated APEX Value: "&round((log(%APERTURE%)*(2.0/log(2.0))*62500))&"/62500""
cscript "%temp%\calculate.vbs" | find "APEX" & 2>nul del /q /f "%temp%\calculate.vbs