File batch Come non stampare lo spazio finale in un vbscript

Aug 24 2020

Ho una domanda su qualcosa che sto cercando di capire da almeno un'ora buona. Ho un file batch che crea un piccolo script VBS in modo da poter eseguire alcuni calcoli complessi (beh, almeno alcuni che il prompt dei comandi non farà). Il codice è semplicissimo

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

ma c'è un piccolo problema che mi infastidisce a non finire. Il risultato mostra come

Calculated APEX Value: 432429 /62500

quando voglio che si mostri come

Calculated APEX Value: 432429/62500

Notare lo spazio tra i numeri.

Questo script viene eseguito sull'ultima versione di Windows 10 (aggiornato la scorsa notte).

Grazie

Risposte

1 LPChip Aug 24 2020 at 04:34

Il problema è l'uso dei parametri di wScript.echo. Non appena usi più parametri, inserisce degli spazi tra ogni risultato. Devi rimuoverli e mettere tutto nel primo parametro. Modificando, per a & (necessità di sfuggire a causa dell'uso di cmd) tutto diventa un parametro e gli spazi sono spariti.

Lo script diventa il seguente:

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

Dato lo scambio di commenti e per darti un'idea di quanto sia facile e potente PowerShell, ecco il tuo script scritto in 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
  • Solo alcuni suggerimenti ...

Rimuovi tutti i caratteri di escape ^sostituendo echoconset /p

Utilizzare uno labelin :loopcon findstr regexal test di ingresso / numeri

Sostituisci //nologocon | find "string"e ottieni il tempo di eliminare il tuo file.vbsdopo corsa


@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