找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28454|回复: 4

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

[复制链接]
发表于 2015-10-24 00:10:11 | 显示全部楼层 |阅读模式
本帖最后由 回家路上 于 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);
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-10-24 00:39:04 | 显示全部楼层
代码前 是你变义一下
要不 开启启延缓环境变量 试试

评分

参与人数 1技术 +1 收起 理由
回家路上 + 1 乐于助人

查看全部评分

发表于 2015-10-24 00:40:37 | 显示全部楼层
本帖最后由 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
解决办法:转义
发表于 2015-10-24 02:56:34 | 显示全部楼层
除了转义外,单就楼主的代码而言个人建议直接读取变量:
  1. var WshShell = new ActiveXObject('Wscript.Shell')
  2. var path = WshShell.Environment("process")("path")
  3. WSH.Echo(path)
复制代码

评分

参与人数 1技术 +1 收起 理由
回家路上 + 1 乐于助人

查看全部评分

 楼主| 发表于 2015-10-24 22:19:24 | 显示全部楼层
回复 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);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 12:48 , Processed in 0.021025 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表