Fichier Batch Comment ne pas imprimer l'espace final dans un vbscript
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
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
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
- 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