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

[其他] 【已解决】Bat和JS混编传值过程中符号丢失

本帖最后由 回家路上 于 2015-10-24 22:36 编辑
  1. @set @n=0;/* & echo off
  2. set test=aaaa,bbbb,cccc
  3. set ceshi=aaaa,bbbb,cccc
  4. :: 这么直接调是正常的。
  5. (echo;%test%&echo;%ceshi%)|cscript -nologo -e:jscript "%~0"
  6. :: 在for循环里这么写,为什么逗号没了,中间成空格了。
  7. for /f "delims=" %%i in ('(echo;%test%^&echo;%ceshi%^)^|cscript -nologo -e:jscript "%~0"') do echo;%%i
  8. pause & exit/b & rem */
  9. var test = WScript.StdIn.ReadLine();
  10. var ceshi = WScript.StdIn.ReadLine();
  11. WSH.Echo(test);
  12. WSH.Echo(ceshi);
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
人生是一部书/只有这一页最温暖/读懂它的时候/我们在远方流泪...

代码前 是你变义一下
要不 开启启延缓环境变量 试试
1

评分人数

TOP

本帖最后由 CrLf 于 2015-10-24 02:57 编辑

  1. for /f %%a in (' xxxx ^| oooo ') do ooxxooxxooxx
复制代码
实际执行的时候相当于:
  1. cmd /c xxxx ^| oooo >NamePipe 2>con
  2. for /f %%a in (NamePipe) do ooxxooxxooxx
复制代码
而假如 xxxx 或 oooo 中包含内部命令或命令连接语法 () & && | || 时也会有所不同
  1. echo xxxx | findstr oooo
  2. systeminfo | pause
复制代码
相当于
  1. cmd /c echo xxxx | findstr oooo
  2. systeminfo | cmd /c pause
复制代码

-----------------------------------------------------------------------
哦噗...仔细看了想楼主的代码发现我答非所问了
其实解释起来很简单,逗号是 for 命令的分隔符(包括 {空格} {Tab} = , ;),预处理的时候被转换为空格了
参考下这个帖子也是不错的
http://www.bathome.net/viewthread.php?tid=2393
解决办法:转义

TOP

除了转义外,单就楼主的代码而言个人建议直接读取变量:
  1. var WshShell = new ActiveXObject('Wscript.Shell')
  2. var path = WshShell.Environment("process")("path")
  3. WSH.Echo(path)
复制代码
1

评分人数

TOP

回复 2# terse
回复 4# CrLf


高手的代码果然“晦涩”。

解决方法:
1)变量延迟
pcl也是立马就想到了变量延迟,很神奇,延迟一下就好了。
  1. setlocal enabledelayedexpansion
  2. ... ...
  3. for /f "delims=" %%i in ('(echo;!test!^&echo;!ceshi!^)^|cscript -nologo -e:jscript "%~0"') do echo;%%i
复制代码
2)反正就是不让其“转义”
  1. for /f "delims=" %%i in ('(echo;"%test%"^&echo;"%ceshi%"^)^|cscript -nologo -e:jscript "%~0"') do echo;%%i
复制代码
3)改变传值/取数方式
①Crlf这直接从环境变量里取
②pcl建议,传值
  1. for /f "delims=" %%i in ('cscript -nologo -e:jscript "%~0" "%test%" "%ceshi%"') do echo;%%i
复制代码
取值用
  1. var test = WScript.Arguments(0);
  2. var ceshi = WScript.Arguments(1);
复制代码
人生是一部书/只有这一页最温暖/读懂它的时候/我们在远方流泪...

TOP

返回列表