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

[文本处理] call传递的参数中带有引号和空格,导致传递后被分割

[复制链接]
发表于 2018-8-30 05:22:40 | 显示全部楼层 |阅读模式
本帖最后由 踏沙行 于 2018-8-30 05:31 编辑

已知:J:\1.txt内容为:
  1. "Key k" : "T1=abc def gh"
  2. "Value v":  "T2=IJK lmn OP"
  3.   " se sf" : " T3= FLK   LK  sEL"
  4.   "  S4 s " : FEEL DEEP File txt
复制代码
使用call代码如下:
  1. @echo off
  2. for /f  "tokens=1,2 delims=:" %%a in (J:\1.txt) do call :lp "%%a";"%%b" c
  3. pause&exit

  4. :lp
  5. echo,%1;%2
  6. goto:eof
复制代码
结果,%1,%2会自动将传过来的参数按引号和空格为标记分割,即使参数用引号包括
结果为:
  1. ""Key;k" "
  2. " "Value;v""
  3. "  ";se
  4. "  ";S4
复制代码
如果%%a和%%b的引号不包含空格,倒是可以正常传递。
请问,怎么让传递参数时,内容不被分割?
发表于 2018-8-30 08:48:42 | 显示全部楼层
我感觉 这个参数传的有点矛盾了,原文本有引号的,%%a 套一层引号,比如第一个相当于""Key k"" ,原来的引号就废了,空格隔开了,两边的引号成对了只引了个空 。
而原文本没有引号的,而有空分隔的,想做为一个整体,势必就要用引号包含。
所以先把你的原文本FEEL DEEP File txt  用引号先包含,再%%a,%%b  去掉引号?

或者还有种耍赖的方法,不用改原文,%%a,%%b 去掉引号,再把 lp 的echo,%1,%2改成 echo %*  管你分成几个参数传- -
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 16:57 , Processed in 0.012439 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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