[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 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. )
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

参考下这种形式的写法:
  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
复制代码

TOP

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

powershell代码=简单,直观,明了
  1.    {你想怎么格式化这个数据}   -f    (1+2)*5+2   
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

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

在创建之前,先判断a.vbs是否存在。

TOP

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

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

re DAIC
谢谢回复
问题不在文件是否存在上,而是没办法让a.vbs接受我的cmd算式

TOP

回复 5# FOR


BAT把算式作为一个参数传递给VBS,在VBS里面用WScript.Arguments(0)接受传入的参数。

TOP

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
1

评分人数

TOP

回复 6# DAIC


    求详细代码,谢谢!

TOP

可以了,哈哈,谢谢大家
最后在请问个问题,这个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
复制代码

TOP

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完全一样。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

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

TOP

返回列表