File batch Come non stampare lo spazio finale in un vbscript
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
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
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
- Solo alcuni suggerimenti ...
Rimuovi tutti i caratteri di escape ^
sostituendo echo
conset /p
Utilizzare uno label
in :loop
con findstr regex
al test di ingresso / numeri
Sostituisci //nologo
con | find "string"
e ottieni il tempo di eliminare il tuo file.vbs
dopo 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