Board logo

标题: [问题求助] vbs 怎样调用参数[已解决] [打印本页]

作者: FOR    时间: 2014-4-23 21:54     标题: vbs 怎样调用参数[已解决]

本帖最后由 FOR 于 2014-4-27 09:11 编辑

要求运行以下 cmd文件,显示出算式 (1+2)*5+2 的结果
问如何把这个算式传递给 a.vbs
a.vbs的代码怎样写?
谢谢。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str=(1+2)*5+2
  4. for /f "tokens=1* delims==" %%i in ('cscript /nologo a.vbs') do (
  5.   echo %%i
  6. )
  7. echo.
  8. pause>nul
复制代码
我这样写的话就会每运行一次,就要重新创建一个a.vbs文件,而我不想反复创建vbs文件
  1. set str=(1+2)*5+2
  2. >c:\a.vbs echo WScript.Echo a ^& " = " ^& FormatNumber(eval(!str!),,-1)
  3. for /f "tokens=2 delims= " %%i in ('cscript /nologo c:\a.vbs') do (
  4.      echo !str! = %%i
  5. )
复制代码

作者: wankoilz    时间: 2014-4-23 22:32

参考下这种形式的写法:
  1. ' 2>nul 3>nul&@echo off&setlocal enabledelayedexpansion&cls
  2. '&set str=(1+2)*5+2
  3. WScript.Echo FormatNumber(eval(wscript.arguments(0)),,-1)
  4. '&for /f "delims=" %%i in ('cscript /nologo /e:vbscript %0 "!str!"') do echo !str! = %%i
  5. '&pause
复制代码

作者: PowerShell    时间: 2014-4-24 00:19

太tm麻烦了!我学powershell某种程度上就是为了避免,这种【2语言来回镶嵌,还要相互调用,的让人头晕目眩,烟花缭乱】谋杀我脑细胞的惨案。

powershell代码=简单,直观,明了
  1.    {你想怎么格式化这个数据}   -f    (1+2)*5+2   
复制代码

作者: DAIC    时间: 2014-4-24 13:01

我这样写的话就会每运行一次,就要重新创建一个a.vbs文件,而我不想反复创建vbs文件

在创建之前,先判断a.vbs是否存在。
作者: FOR    时间: 2014-4-24 21:12

re wankoilz
谢谢回复
这只是我代码的一部分,这种混编的方式也麻烦,也影响美观,并且不利于维护。

re PowerShell
谢谢回复
重新学一门语言,需要时间,尽管它和cmd很近,可要熟悉且掌握仍需投入大量的时间和精力,这正是我缺少的。

re DAIC
谢谢回复
问题不在文件是否存在上,而是没办法让a.vbs接受我的cmd算式
作者: DAIC    时间: 2014-4-24 21:27

回复 5# FOR


BAT把算式作为一个参数传递给VBS,在VBS里面用WScript.Arguments(0)接受传入的参数。
作者: CrLf    时间: 2014-4-24 23:22

js 与 bat 的契合度更好:
  1. @set @n=0/*
  2. @echo off
  3. for /f "delims=" %%a in ('cscript /nologo /e:javascript "%~0" "(1+2)*5+2"') do echo 结果为 %%a
  4. pause&exit
  5. */
  6. WScript.Echo(eval(WScript.Arguments(0)))
复制代码
因为是自用的脚本,所以可以放心用 eval
作者: FOR    时间: 2014-4-25 23:09

回复 6# DAIC


    求详细代码,谢谢!
作者: FOR    时间: 2014-4-25 23:20

可以了,哈哈,谢谢大家
最后在请问个问题,这个vbs如何设置小数位数?比如我想要保留5位小数。。
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=1.23+5.8*8.2*5
  3. for /f "delims=" %%i in ('cscript /nologo tmptmp.vbs !str!') do (
  4.      echo %%i
  5. )
  6. pause
复制代码

作者: PowerShell    时间: 2014-4-25 23:33

PS C:\Users\user001\desktop\powershell> 1.23+5.8*8.2*5
239.03
PS C:\Users\user001\desktop\powershell> "{0:N5}"  -f (1.23+5.8*8.2*5)
239.03000
这其实是。net法,或者说和。net完全一样。
作者: FOR    时间: 2014-4-27 09:09

这样就可以了,嗯
问题完美解决,再次谢谢大家。
  1. WScript.Echo a ^& " = " ^& FormatNumber(eval(!str!),5,-1)
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2