Fichier Batch Comment ne pas imprimer l'espace final dans un vbscript

Aug 24 2020

J'ai une question sur quelque chose que j'essaie de comprendre depuis au moins une bonne heure. J'ai un fichier batch qui crée un petit script VBS pour que je puisse faire des calculs complexes (enfin, au moins certains que l'invite de commande ne fera pas). Le code est super simple

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

mais il y a un petit problème qui m'ennuie sans fin. Le résultat apparaît comme

Calculated APEX Value: 432429 /62500

quand je veux vraiment que ça se montre

Calculated APEX Value: 432429/62500

Remarquez l'espace entre les nombres.

Ce script s'exécute sur la dernière version de Windows 10 (mise à jour hier soir).

Merci

Réponses

1 LPChip Aug 24 2020 at 04:34

Le problème est l'utilisation des paramètres de wScript.echo. Dès que vous utilisez plusieurs paramètres, il place des espaces entre chaque résultat. Vous devez les supprimer et tout mettre dans le premier paramètre. En changeant le, pour un & (besoins échappés en raison de l'utilisation de cmd) tout devient un paramètre et les espaces ont disparu.

Le script devient comme suit:

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

Compte tenu de l'échange de commentaires et pour vous donner une idée de la simplicité et de la puissance de PowerShell, voici votre script écrit en 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
  • Juste quelques suggestions ...

Supprimer tout échappement en ^remplaçant echoparset /p

Utiliser une labeldans :loopavec findstr regexde tests entrée / numéros

Remplacer //nologopour | find "string"et obtenir le temps de supprimer votre file.vbsaprès l' exécution


@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