Board logo

标题: [数值计算] [已解决]bat中单引号如何转义 [打印本页]

作者: shootman2    时间: 2015-4-8 19:12     标题: [已解决]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

请大神帮助!!!
作者: pcl_test    时间: 2015-4-8 19:27

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

作者: shootman2    时间: 2015-4-8 19:32

回复 2# pcl_test


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

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

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

所以for /f 体里必须加 awk
作者: DAIC    时间: 2015-4-8 19:35

  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
复制代码

作者: CrLf    时间: 2015-4-8 19:38

本帖最后由 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
复制代码

作者: pcl_test    时间: 2015-4-8 19:40

  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
复制代码

作者: shootman2    时间: 2015-4-8 22:48

回复 6# pcl_test


    你的思路也挺好,简单明了! 32 个赞给你!
作者: shootman2    时间: 2015-4-8 22:51

回复 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
作者: pcl_test    时间: 2015-4-8 22:59

问题得到解决后请在标题最前面注明[已解决]哟
http://www.bathome.net/thread-3473-1-1.html
作者: shootman2    时间: 2015-4-9 11:59

回复 5# CrLf


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




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