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

[数值计算] [已解决]bat中单引号如何转义

本帖最后由 shootman2 于 2015-4-13 21:22 编辑

如下表达式中的单引号如何转义

如下表达式在外层运行正常
debug>echo 40*(1-80*0.01)|bc|awk '{printf "%.2f",$0}'
8.00

但是嵌入到for /f体中就不行了,貌似是需要对单引号进行转义,然后就不会了
for /f %%x in ('******') do echo %%x

请大神帮助!!!
1

评分人数

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

  1. @echo off
  2. for /f "delims=" %%a in ('echo 40*^(1-80*0.01^)^|bc') do echo %%a
  3. pause
复制代码

TOP

回复 2# pcl_test


    不好意思,前面的例子举错了!应该是这样的!

debug>echo 40*(1-99*0.01)|bc|awk '{printf "%.2f",$0}'
0.40

后面加 awk 是为了将 .40 格式化为 0.40

所以for /f 体里必须加 awk

TOP

  1. @echo off
  2. for /f %%i in ('echo 40*^(1-80*0.01^) ^| bc ^| gawk "{printf \"%%.2f\",$0}"') do (
  3.     echo,%%i
  4. )
  5. pause
复制代码
1

评分人数

TOP

本帖最后由 CrLf 于 2015-4-8 21:04 编辑

windows 的 awk 要用 " 囊括参数
另外,既然都用到 awk,就不需要 bc 了
  1. awk "BEGIN{printf \"%%.2f\",40*(1-99*0.01)}"
复制代码
  1. for /f %%x in ('awk "BEGIN{printf \"%%.2f\",40*(1-99*0.01)}"') do echo %%x
复制代码

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('echo 40*^(1-99*0.01^)^|bc') do set "n=%%a" &if "!n:~,1!" == "." (echo,0%%a) else (echo,%%a)
  3. pause
复制代码

TOP

回复 6# pcl_test


    你的思路也挺好,简单明了! 32 个赞给你!

TOP

回复 4# DAIC


    你使用gawk实现了,虽然我不知道gawk和awk的却别,但是我用awk也实现了,感谢大神!

debug>for /f "delims=" %x in ('echo 40*^(1-99*0.01^)^|bc^|awk "{printf \"%.2f\",$0}"') do echo %x
debug>echo 0.40
0.40

TOP

问题得到解决后请在标题最前面注明[已解决]哟
http://www.bathome.net/thread-3473-1-1.html

TOP

回复 5# CrLf


    到底还是大神呀!把命令行玩的这么溜!128个赞给你!

TOP

返回列表