标题: [其他] 【已解决】Bat和JS混编传值过程中符号丢失 [打印本页]
作者: 回家路上 时间: 2015-10-24 00:10 标题: 【已解决】Bat和JS混编传值过程中符号丢失
本帖最后由 回家路上 于 2015-10-24 22:36 编辑
- @set @n=0;/* & echo off
-
- set test=aaaa,bbbb,cccc
- set ceshi=aaaa,bbbb,cccc
-
- :: 这么直接调是正常的。
- (echo;%test%&echo;%ceshi%)|cscript -nologo -e:jscript "%~0"
-
- :: 在for循环里这么写,为什么逗号没了,中间成空格了。
- for /f "delims=" %%i in ('(echo;%test%^&echo;%ceshi%^)^|cscript -nologo -e:jscript "%~0"') do echo;%%i
-
- pause & exit/b & rem */
-
- var test = WScript.StdIn.ReadLine();
- var ceshi = WScript.StdIn.ReadLine();
- WSH.Echo(test);
- WSH.Echo(ceshi);
复制代码
作者: terse 时间: 2015-10-24 00:39
代码前 是你变义一下
要不 开启启延缓环境变量 试试
作者: CrLf 时间: 2015-10-24 00:40
本帖最后由 CrLf 于 2015-10-24 02:57 编辑
- for /f %%a in (' xxxx ^| oooo ') do ooxxooxxooxx
复制代码
实际执行的时候相当于:- cmd /c xxxx ^| oooo >NamePipe 2>con
- for /f %%a in (NamePipe) do ooxxooxxooxx
复制代码
而假如 xxxx 或 oooo 中包含内部命令或命令连接语法 () & && | || 时也会有所不同- echo xxxx | findstr oooo
- systeminfo | pause
复制代码
相当于- cmd /c echo xxxx | findstr oooo
- systeminfo | cmd /c pause
复制代码
-----------------------------------------------------------------------
哦噗...仔细看了想楼主的代码发现我答非所问了
其实解释起来很简单,逗号是 for 命令的分隔符(包括 {空格} {Tab} = , ;),预处理的时候被转换为空格了
参考下这个帖子也是不错的
http://www.bathome.net/viewthread.php?tid=2393
解决办法:转义
作者: CrLf 时间: 2015-10-24 02:56
除了转义外,单就楼主的代码而言个人建议直接读取变量:- var WshShell = new ActiveXObject('Wscript.Shell')
- var path = WshShell.Environment("process")("path")
- WSH.Echo(path)
复制代码
作者: 回家路上 时间: 2015-10-24 22:19
回复 2# terse
回复 4# CrLf
高手的代码果然“晦涩”。
解决方法:
1)变量延迟
pcl也是立马就想到了变量延迟,很神奇,延迟一下就好了。- setlocal enabledelayedexpansion
- ... ...
- for /f "delims=" %%i in ('(echo;!test!^&echo;!ceshi!^)^|cscript -nologo -e:jscript "%~0"') do echo;%%i
复制代码
2)反正就是不让其“转义”- for /f "delims=" %%i in ('(echo;"%test%"^&echo;"%ceshi%"^)^|cscript -nologo -e:jscript "%~0"') do echo;%%i
复制代码
3)改变传值/取数方式
①Crlf这直接从环境变量里取
②pcl建议,传值- for /f "delims=" %%i in ('cscript -nologo -e:jscript "%~0" "%test%" "%ceshi%"') do echo;%%i
复制代码
取值用- var test = WScript.Arguments(0);
- var ceshi = WScript.Arguments(1);
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |